垂直數字相加
1
2
cat num.txt | awk '{sum += $1} END {print sum}'
。
問題一:
如果兩個文件行數相同,只是希望逐行合併
方法一
$ paste -d "\t" file_1 file_2
複製代碼
方法二
$ awk 'NR==FNR{a[NR]=$0;nr=NR;}NR>FNR{print a[NR-nr]"\t"$0}' file_1 file_2
複製代碼
方法三
$ awk '{getline f2 < "file_2"; print $0"\t"f2}' file_1
複製代碼
問題二:
兩個文件之間單純求記錄交集
方法一(需要先去除重複記錄,兩個文件的格式必須相同,尤其要注意每行結尾的空格,換行符)
$ sort file_1 file_2 |uniq -d
複製代碼
方法二(file_1大於file_2的記錄數,不適合記錄過多的文件,也需要提前去重複)
$ grep -w -f file_1 file_2|sort|uniq
複製代碼
兩種方法可以一起用,從而檢查結果是否準確
方法三(如果需要匹配超過兩個的文件,就修改“==2”的數值爲文件個數)
$ awk '!b[$1,ARGIND]++{if(++a[$1]==2)print}' file_1 file_2
複製代碼
問題三:
累加第二列的數值
方法一(無條件累加)
$ awk '{a=a+$2}END{print a}' file
複製代碼
方法二(若第三列的內容相同,則累加對應記錄的第二列數值)
awk '{a[$3]+=$2}END{for(i in a) printf "%s\t %d\n",i,a[i]}' file
複製代碼
方法三(對其他列的內容進行限制篩選以後累加第二列的數值)
$ awk '$4=="abc" && $5>=100 && $6<=500{a=a+$2}END{print a}' file
複製代碼
方法四(若第三列,第四列內容相同,則累加第二列的數值,並將結果升序輸出)
$ awk '{a[$3,"\t",$4]+=$2}END{for(i in a)printf "%s\t %d\n",i,a[i]}' file|sort
複製代碼