使用awk删除重复项

时间:2015-07-10 23:10:06

标签: awk

我有2个文件new.csv& remove.txt。我使用AWK从生成的任何新csv文件中使用主删除文件。文件是:

$ cat new.csv 

james,smith,bronx,2025555551
adam,stephenson,brooklyn,2025555552
anthony,jackson,queens,2025555553
mary,young,astoria,2025555554
marsha,peterson,madison,2025555555
angie,huff,belk,2025555556

然后有:

$ cat remove.txt 

2025555550
2025555553
2025555555
2025555557
2025555558
2025555559

我的命令是:

$ awk -F, 'NR==FNR{remove[$4]++;next}!($4 in remove)' remove.txt new.csv > final.csv

这给了我与原版相同的内容,如下所示:

$ cat final.csv 

james,smith,bronx,2025555551
adam,stephenson,brooklyn,2025555552
anthony,jackson,queens,2025555553
mary,young,astoria,2025555554
marsha,peterson,madison,2025555555
angie,huff,belk,2025555556

我如何得到这个?

$ cat final.csv 

james,smith,bronx,2025555551
adam,stephenson,brooklyn,2025555552
mary,young,astoria,2025555554
angie,huff,belk,2025555556

1 个答案:

答案 0 :(得分:0)

Etan Reisner's解决方案:

awk -F, 'NR==FNR{remove[$1]++;next}!($4 in remove)' remove.txt new.csv

这非常有效。

对于不太了解AWK的人来说,更精细和程序化的解决方案是:

awk 'BEGIN {while((getline var < "remove.txt")>0) {remove[var]=0}; FS=","}
     {if(!($4 in remove)) {print $0}}' new.csv

在开始读取输入文件之前运行BEGIN块“new.csv”将整个密钥文件“remove.txt”读入关联数组,其中键作为删除键。它还将字段分隔符设置为“,”而不是默认的空格。一次读取一行输入文件的主块然后检查任何删除键中是否存在第4个(最后一个)字段,否则打印。