1、同時指定多個分割符
這時應該把分隔符寫成放到方括號中,如$awk -F"[ :/t]" "{print $1,$3}" test
此時指定了空格,:號,tab三個作為分隔符
2、awk的key的變態用法
awk "{a[$1,"/t", $2] += $4} END {for (uin in a) printf("%s/t%d/n", uin, a[uin]) }" test
用$1"/t"$2組成一維陣列的key,這樣可以用這種方式來處理很多複雜的二維資料邏輯
3、awk 的範圍模板
範圍模板匹配從第一個模板的第一次出現到第二個模板的第一次出現之間所有行。如果有一個模板沒出現,則匹配到開頭或末尾。
如$ awk "/root/,/mysql/" test將顯示root第一次出現到mysql第一次出現之間的所有行。
4、awk的重定向
awk 可使用shell的重定向符進行重定向輸出,如:$ awk "$1 = 100 {print $1 > "output_file" }" test。上式表示如果第一個域的值等於100,則把它輸出到output_file中。也可以用>>來重定向輸出,但不清空檔案,只做追加操作。
這樣可以利用重定向,可以把不同的結果集寫入到不同的檔案裡
比如,我經常要跑出vip1,2,3,4,5,6的6份檔案,那麼就可以寫一個指令碼,一次性都跑出來了
5、 awk -F"|" "NR == FNR { a[$1] = $2 } NR > FNR { if (a[$1]!=""){ a[$1] = $2 - a[$1]; if(a[$1] > 0 && $2 == 2) print $0;} }" test test1
1、同時指定多個分割符
這時應該把分隔符寫成放到方括號中,如$awk -F"[ :/t]" "{print $1,$3}" test
此時指定了空格,:號,tab三個作為分隔符
2、awk的key的變態用法
awk "{a[$1,"/t", $2] += $4} END {for (uin in a) printf("%s/t%d/n", uin, a[uin]) }" test
用$1"/t"$2組成一維陣列的key,這樣可以用這種方式來處理很多複雜的二維資料邏輯
3、awk 的範圍模板
範圍模板匹配從第一個模板的第一次出現到第二個模板的第一次出現之間所有行。如果有一個模板沒出現,則匹配到開頭或末尾。
如$ awk "/root/,/mysql/" test將顯示root第一次出現到mysql第一次出現之間的所有行。
4、awk的重定向
awk 可使用shell的重定向符進行重定向輸出,如:$ awk "$1 = 100 {print $1 > "output_file" }" test。上式表示如果第一個域的值等於100,則把它輸出到output_file中。也可以用>>來重定向輸出,但不清空檔案,只做追加操作。
這樣可以利用重定向,可以把不同的結果集寫入到不同的檔案裡
比如,我經常要跑出vip1,2,3,4,5,6的6份檔案,那麼就可以寫一個指令碼,一次性都跑出來了
5、 awk -F"|" "NR == FNR { a[$1] = $2 } NR > FNR { if (a[$1]!=""){ a[$1] = $2 - a[$1]; if(a[$1] > 0 && $2 == 2) print $0;} }" test test1