问题描述:有两个文本文件a.txt,和b.txt,分别保存了一些数字id,id以逗号分隔,例如:1234,4567,3456。。。。。现在要比较出两文件中不同的id列表。
对于这个问题,比较直观的做法就是在a中找到1234,遍历b中是否存在;a中找到4567,遍历b中是否存在。。。。。。脚本如下:
awk -F "," '{if(NR==FNR){for(i=1;i<=NF;i++) s[$i]}; if(NR>FNR){for(i=1;i<=NF;i++) {if(!($i in s)){print $i}}}}' a.txt b.txt (打印出在a,不在b中的id)
同样需要把a、b文件换下位置打印出在b,不在a中的id列表。
一种更好的方法是利用sort,uniq命令,
sed "s/,/\n/g/" a.txt b.txt b.txt |sort |uniq -u > uniqA.txt(注意uniq -u 显示不重复的行)
同样利用强大的sort 和uniq还可以比较出a,b相同的id列表
sed "s/,/\n/g/" a.txt b.txt |sort |uniq -d >bothaB.txt (uniq -d 只显示重复行)