我有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
答案 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个(最后一个)字段,否则打印。