標籤:
1.AWK的pattern
BEGIN
END
expression 例: NF>10 或/^a/
/regular expression/?
可以?用類似/^a/這種寫法
另一種寫法$1 ~ /^a/ //欄位匹配
運算式之間可以?用&& || ! ?: 等操作符做布爾運算(當然可以是Regex)
expression , expression 表?示開始和結束 例: NF==5,NF==10
例子1: cat /etc/passwd |awk -F":" ‘NR==5,NR==10{print NR,$1}‘ //只顯示passwd檔案的第5-10行,並定義欄位分隔用:號
5 sync
6 games
7 man
8 lp
9 mail
10 news
知識點:1.-F參數。2.expression , expression的用法。
2.AWK的action
完善的編程語?言?支援變數賦值、數組、判斷、迴圈、?自訂函數
有很?方便的預定義的變數和函數
最常?用的是print函數
欄位取值$1、$2、$3……$NF
$0就是檔案的所有行
注意:awk的定義變數不是一定非得$符號開頭,$符號是取欄位值。
例子2:awk ‘BEGIN{RS="[^0-9a-zA-Z]"};{count[$0]++};END{for (i in count) print i,count[i]}‘<1.txt
iwant 1
chinawelcome 1
ilove 1
to 7
china 4
love 4
changsha 5
i 4
beijing 2
welcome 5
you 5
註:語句作用:將檔案的每一個單詞提取出單獨成行,並統計單詞出現的次數。
知識點:1.BEGIN,END塊的寫法和使用({}括起來,;來隔開)。2.分隔字元RS和FS的區別(RS:遇到RS即另開一行)。3.數組的使用。4.for迴圈。5.檔案重新導向輸入
例子3 對上面例子進行擴充(排序並寫入新檔案)
awk ‘BEGIN{RS="[^0-9a-zA-Z]"};{count[$0]++};END{for (i in count) print i,count[i] | "sort -r -k2 -o 3.txt" }‘<1.txt
知識點:1.print用法。print … | command : 運?command命令並將print的輸出作為command的輸?。注意整個command包括參數所有部分都在雙引號內
2. sort用法。-o參數將排序結果寫入檔案,而此重新導向文法完成。
3. getline的用法
例子:將檔案合并起來。
vi join.awk
#!/usr/bin/awk -f
{
getline sl<ARGV[2]
print $0 sl
}
執行:awk -f join.awk file1 file2
linux shell學習之awk ---新手筆記