linux中awk學習小結

awk與sed本身都是一個完整的編程語言,可以用來方便的處理文本,awk處理列。
awk正常的結構: cat tmp.txt | awk 'BEGIN{}{}END{}'   --帶有表頭,帶有中間的處理過程,帶有結尾--
常用用法:cat tmp.txt|awk '{print $1}'  --tmp.txt中字段已空格分隔,$0顯示整行,$1表示第一個域,$NF最後一個,$NF-1倒數第二個域,默認的分隔符是空格--  
1、域分隔符是:
cat /etc/passwd|awk -F':' '{print $1,$NF}'   --命令行模式下,-F參數可修改輸入的分隔符,即處理文件時的分隔符,該命令爲以:分隔passwd文件,打印第一個域和最後一個域,輸出字符默認已空格分隔--
cat /etc/passwd|awk -F':' '{print $1$NF}' --輸出第一個域和最後一個域,之間無空格,--

cat /etc/passwd|awk -F':' '{print $1“____”$NF}'--輸出第一個域和最後一個域,之間分隔爲____,-- 

2、匹配行打印域
例文件tmp.txt:
11 aa 666
22 bb 777
33 cc 888
命令:
cat tmp.txt|awk '/bb/{print $0}'  結果:22 bb 777  --內容匹配到bb的行打印--
cat tmp.txt|awk '/bb/{print $3}'  結果:777   --內容匹配到bb的行,打印第三個域,默認分隔符爲空格--
cat tmp.txt|awk '$2~/b/' {print $3}結果:777   --第二個域可以匹配b的行,打印第三個域,注意有空格--
可以減少一次grep對文件的查找
3、判斷打印
cat /etc/passwd|awk -F':' '{if($1=="bill")print}'  --第一個域等於字符串bill,打印--
4、數組
例文件
search 111
search 222
cm 333
search 444
命令:
cat tmp.txt |awk '{a[$1]++}END{for(i in a)print i,a[i]}'
結果:
cm 1
search 3
a[$1]爲一個數據,a[$1]++記錄不同數據出現次數

5、awk匹配到指定的字符串並打印該字符串所在的域(列數)

格式:

awk '/行匹配串/ {for(i=1;i<=NF;i++) if($i ~ /字符串/)  print $i i}'  $filename
awk '/行匹配串/ {for(i=1;i<=NF;i++) if($i ~ /(字符串1|…|字符串n)/)  print $i i}'    $filename
例:
awk '/is/{for(i=1;i<=NF;i++) if($i ~ /is/) print $i i}' try.pl


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