使用Awk删除重复项

使用Awk删除重复项,awk,Awk,我有两个文件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,be

我有两个文件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
解决方案:

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
awk'BEGIN{while((getline var<“remove.txt”)>0{remove[var]=0};FS=“,”}
{if(!(删除中的$4)){print$0}}new.csv
开始读取输入文件“new.csv”之前运行BEGIN块将整个密钥文件“remove.txt”读取到一个关联数组中,其中的密钥作为移除密钥。它还将字段分隔符设置为“”,而不是默认的空白。主块一次读取一行输入文件,然后检查第四个(最后一个)字段是否存在于任何删除键中,并以其他方式打印。

解决方案:

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
awk'BEGIN{while((getline var<“remove.txt”)>0{remove[var]=0};FS=“,”}
{if(!(删除中的$4)){print$0}}new.csv

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

要删除的列不是
remove.txt中的
$4
,您需要
删除[$1]+
@Etan Reisner-这正是我需要的。谢谢因此,对于任何遇到这个问题的人来说,它是
$awk-F,'NR==FNR{remove[$1]++;next}!(删除中$4)'remove.txt new.csv>final.csv
@peacle\u Warrior您应该将解决方案作为答案发布并接受它。要删除的列不是
remove.txt中的
$4
,您需要
删除[$1]+
@Etan Reisner-这正是我需要的。谢谢因此,对于任何遇到这个问题的人来说,它是
$awk-F,'NR==FNR{remove[$1]++;next}!($4 in remove)'remove.txt new.csv>final.csv
@peacle\u Warrior您应该将解决方案作为答案发布并接受它。