实际工作中经常会遇到两个文件中特定列比较的问题,以下是网上查到两文件比较的代码,包括交集、并集和差集。
- 交集
awk 'NR==FNR{A[$0];next} ($0 in A)' a.txt b.txt
此处A代表前一个文件,前一个$0指的是a.txt中的数据,后一个则指的是b.txt中的数据。
条件NR==FNR成立时,当前读入的是a.txt,执行{A[$0]; next},将a.txt文件每一行存入数组A,并使用$0做为下标引用,next类似于其它语言的continue。
条件NR==FNR不成立时,当前读入的是b.txt,($0 in A)语句判断b.txt的每行数据是否在A数组中,如果存在,则打印出该行数据
2. 并集
awk '!A[$1]++' a.txt b.txt
3. 差集
当a-b时:
awk 'NR==FNR{A[$0];next} !($0 in A)' b.txt a.txt
b-a则调过来。
条件NR==FNR,当前读入的是b.txt,执行{A[$0];next}, 将b.txt文件存入数组A。
条件NR==FNR不成立时,当前读入的是a.txt,判断a.txt每行数据在A数组中如果不存在,则打印出该行数据