【awk】两文件处理

发布时间 2023-10-13 09:16:26作者: xjce

实际工作中经常会遇到两个文件中特定列比较的问题,以下是网上查到两文件比较的代码,包括交集、并集和差集。

  1. 交集
    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数组中如果不存在,则打印出该行数据