转自http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=3678518
这段时间多亏大家的帮助,利用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
- $ 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