Linux命令之awk

awk中使用shell命令
awk '{cmd="rm "$0;system(cmd)}' filename.txtshell

awk 中輸出雙引號和單引號segmentfault

awk '{print "\""}'
awk '{print "'\''"}'

統計每行字符分割後特定字符出現的次數
awk -F "," '{if($(NF-1)=="2"){print $0}}' | wc -lbash

統計次數學習

awk -F "," ' BEGIN { count1=0;count2=0;count3=0} { if((NF-1)==1){count1+=1} else if((NF-1)==2){count2+=1} else{count3+=1} } END {print NR,count1,count2,count3} ' 20151120.txt

awk中取對應的列:取整行$0,取第一列$1,取最後一列$NF,取倒數第二列$(NF-1)區塊鏈



使用awk處理文件中上下關聯的兩行,例如文件 foo.txt有以下內容
abc
portals: 192.168.5.41:3260
def
portals: 192.168.5.43:3260

如何把文件foo.txt內容變爲以下內容spa

abc 192.168.5.41:3260
def 192.168.5.43:3260

方法: awk '/port/{print a" "$2}{a=$1}' foo.txtcode

解釋:blog

處理第一行的時候,以port開頭嗎?很明顯,不以port開頭,因此那個pattern不匹配,action不執行。但執行了後面的 a=$1
處理第二行的時候,以port開頭,打印出來a和本行$2,再處理就是個循環過程。

因爲第一行沒有匹配以port開頭的,因此print a" "$2不執行,執行a=$1, a=abc
因爲第二行有匹配以port開頭的,因此print a" "$2行執行,因爲a=abc,因此輸出 abc 192.168.5.41:3260
因爲第三行沒有匹配以port開頭的,因此print a" "$2不執行,執行a=$1,a=def
因爲第四行有匹配以port開頭的,因此print a" "$2行執行,因爲a=def,因此輸出 def 192.168.5.43:3260rem

由此獲得結果:get

abc 192.168.5.41:3260
def 192.168.5.43:3260



歡迎訂閱「K叔區塊鏈」 - 專一於區塊鏈技術學習

博客地址: http://www.jouypub.com
簡書主頁: https://www.jianshu.com/u/756c9c8ae984
segmentfault主頁: https://segmentfault.com/blog/jouypub
騰訊雲主頁: https://cloud.tencent.com/developer/column/72548
相關文章
相關標籤/搜索