awk 交集 并集 累加

这段时间多亏大家的帮助,利用awk命令解决了很多问题,在此也总结自己实际运用到的问题,方便其他童鞋一起学习shell。

问题一:
如果两个文件行数相同,只是希望逐行合并
方法一

$ 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

复制代码
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值