awk 累加


垂直數字相加

1

2

cat num.txt | awk '{sum += $1} END {print sum}'


問題一:
如果兩個文件行數相同,只是希望逐行合併
方法一

  1. $ paste -d "\t" file_1 file_2

複製代碼

方法二

  1. $ awk 'NR==FNR{a[NR]=$0;nr=NR;}NR>FNR{print a[NR-nr]"\t"$0}' file_1 file_2

複製代碼

方法三

  1. $ awk '{getline f2 < "file_2"; print $0"\t"f2}' file_1

複製代碼

問題二:
兩個文件之間單純求記錄交集
方法一(需要先去除重複記錄,兩個文件的格式必須相同,尤其要注意每行結尾的空格,換行符)

  1. $ sort file_1 file_2 |uniq -d

複製代碼

方法二(file_1大於file_2的記錄數,不適合記錄過多的文件,也需要提前去重複)

  1. $ grep -w -f file_1 file_2|sort|uniq

複製代碼

兩種方法可以一起用,從而檢查結果是否準確
方法三(如果需要匹配超過兩個的文件,就修改“==2”的數值爲文件個數)

  1. $ awk '!b[$1,ARGIND]++{if(++a[$1]==2)print}' file_1 file_2

複製代碼

問題三:
累加第二列的數值
方法一(無條件累加)

  1. $ awk '{a=a+$2}END{print a}'  file

複製代碼

方法二(若第三列的內容相同,則累加對應記錄的第二列數值)

  1. awk '{a[$3]+=$2}END{for(i in a) printf "%s\t %d\n",i,a[i]}' file

複製代碼

方法三(對其他列的內容進行限制篩選以後累加第二列的數值)

  1. $ awk '$4=="abc" && $5>=100 && $6<=500{a=a+$2}END{print a}' file

複製代碼

方法四(若第三列,第四列內容相同,則累加第二列的數值,並將結果升序輸出)

  1. $ awk '{a[$3,"\t",$4]+=$2}END{for(i in a)printf "%s\t %d\n",i,a[i]}' file|sort

複製代碼


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