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

复制代码


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