awk 入門教程

linux中awk是一個強大的文本分析工具,awk在其對數據分析並生成報告時,顯得尤爲強大。簡單來說awk就是把文件逐行的讀入,以空格爲默認分隔符將每行切片,切開的部分再進行各種分析處理

  1. awk空格等於把兩個字段拼接起來
  2. " "表示中間是字符
  3. OFS默認是一個空格,將文本文件拼接到一起。當給某一列賦值時,會使OFS重新拼接文件

查看文件

awk '{print}' coin.txt

awk 入門教程

查看第一列
awk '{print $1}' coin.txt

awk 入門教程

查看文件前三列
awk '{print $1,$2,$3}' coin.txt

awk 入門教程

添加製表符 "\t" 使每列直接用tab隔開
awk '{print $1 "\t" $2 "\t" $3}' coin.txt

awk 入門教程

  1. NR代表文件每行的行數
  2. NF代表文件中每行有多少個字段個數
  3. "NR"=number of record
  4. "NF"=number of field
打印出文件中每列有多少個字段
awk '{print NF}' coin.txt

awk 入門教程

打印出文件中有多少行
awk '{print NR}' coin.txt 

awk 入門教程

打印前兩列,並顯示每列的行數
awk '{print NR "\t" $1 "\t" $2}' coin.txt

awk 入門教程

顯示出文件所有內容,並打印出每行的行數
awk '{print NR, $0}' coin.txt    # $0表示輸出coin.txt的所有內容,NR", " 表示行數與第一列以一個空格分隔

awk 入門教程

打印出文件內容並且輸出每一行的字段個數
awk '{print NF "\t" $0}' coin.txt

awk 入門教程

第三列是1986就打印出來
awk '$3==1986 {print $0}' coin.txt

awk 入門教程

打印出第一列等於gold的信息
awk '$1=="gold" {print $0}' coin.txt    #字符串要使用雙引號

awk 入門教程

打印出第7行
awk 'NR==7{print NR, $0}' coin.txt

awk 入門教程

打印出字段數爲7的
awk 'NF==7{print NR, $0}' coin.txt

awk 入門教程

如果awl命令後邊沒有文件名的話,awk會等待你輸入,然後再執行命令輸出信息

awk 入門教程
awk 入門教程

Ctrl+C 退出
用FS自定義自己的分隔符,只會以逗號進行分割,就算字符中間有空格的話,依舊會以逗號分隔打印出來awk 入門教程

awk 入門教程

用OFS定義輸出分隔符

awk 入門教程

也看以同時把輸入輸出分隔符定義成一個符號,中間用分號隔開

awk 入門教程

可以同時打印兩個文件
awk '{print NR,$0}' coin.txt 1.txt 

awk 入門教程

加FILENAME 打印出文件名
 awk '{print NR,FILENAME,$0}' coin.txt 1.txt 

awk 入門教程

可以選擇文件內容進行賦值,比如把第三列輸出成空格
awk '{$3=" ";print $0}' coin.txt

awk 入門教程

用NF打印出每列最後一個字段
awk '{print $NF}' coin.txt    #NF代表每列有多少個字段,所以直接打印NF就可以

awk 入門教程

打印每列倒數第二個同理
awk '{print $(NF-1)}' coin.txt

awk 入門教程

正則表達式
/ /
編輯一個test文件,打印出”abc“

awk 入門教程

awk '/abc/{print $0}' test.txt

awk 入門教程

/a.b/ 點在這裏表示a和b之間任意一個字符
awk '/a.c/{print $0}'

awk 入門教程

/a.c/ " \ "是轉譯字符,只打印出a.c, 匹配其他特殊字符時同理

awk 入門教程
awk 入門教程

^和$ ^表示所匹配字符串要在字段最前面,$表示所匹配字符串在字段最後
awk '/^777/{print $0}'
awk '/777$/{print $0}

awk 入門教程
awk 入門教程

/a[xzy]b/ 表示可以匹配a和b中間[]裏的xzy中任意一個字符
awk '/a[xzy]c/{print $0}'

awk 入門教程

/a[a-z]b/同理,匹配[]中a和z直接任意一個字符
awk '/a[a-z]c/{print $0}'

awk 入門教程

awk '/a[a-zA-Z]c/{print $0}'    #a到z A到Z中間任意一個字符

awk 入門教程

^如果在[]裏表示不是的意思
[^]
awk '/a[^a-z]c/ {print $0}'    #小寫a到z不匹配

awk 入門教程

* 和 + ?
  1. *表示0次或多次
    比如:
    /a*b/
    可以匹配到
    "ab"
    "aab"
    "aaab"
    "b"

  2. +表示最少1次
    比如:
    /a+b/
    可以匹配到
    "ab"
    "aab"
    不能匹配到
    "b"

  3. ?表示是或否
    比如:
    /a?b/
    只能匹配到
    "b"
    "ab"
{} 可以規定匹配到的次數
awk '/ab{2}c/ {print $0}'    #{2}表示只可以出現2個b

awk 入門教程

也可以擴展{2,3}
 awk '/ab{2,3}c/ {print $0}'    #表示b可以出現2次到3次

awk 入門教程

/ab{2,}c/ 表示最少出現2個b。

awk 入門教程

()表示把()裏的變成一個整體

比如/(ab)+c/

awk '/(ab)+c/ {print $0}'

awk 入門教程

歡迎加入

awk 入門教程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章