首页 > 解决方案 > 使用 awk/python 从 CSV 文件中删除重复行

问题描述

我有一个file1.csv行,如:

adx,999-99-7708
ada,999-99-8101
ad1,999-99-8342
zda,103-54-7013
ad1,999-99-8591

file2.csv的行如下:

1967-05-08,583-50-3833,Trac,Mich,Ewell,3000,Cumming,3830 Man Rid Driv,tracey@gmail.com,(111) 123-4567,0123,GA,339061
1988-03-27,103-54-7013,Mar,Grac,Vea,30004,Au,2549 Walt Wa Apt D1,m@augu.edu,(706) 916-4817,021341,GA,339060
1973-11-16,183-54-5013,Carl,,Thom,30093,Norcross,1021 Ri Rid Drive,,,,,339059

想要的输出:

1967-05-08,583-50-3833,Trac,Mich,Ewell,3000,Cumming,3830 Man Rid Driv,tracey@gmail.com,(111) 123-4567,0123,GA,339061
1973-11-16,183-54-5013,Carl,,Thom,30093,Norcross,1021 Ri Rid Drive,,,,,339059 

我试过了

awk -F, 'NR==FNR{a[$2]++; next} !a[$2]{print}' file1.txt file2.txt 

从 file1.txt 检查 file2.txt 的重复项并删除它们,但仍然得到输出

1967-05-08,583-50-3833,Trac,Mich,Ewell,3000,Cumming,3830 Man Rid Driv,tracey@gmail.com,(111) 123-4567,0123,GA,339061
1988-03-27,103-54-7013,Mar,Grac,Vea,30004,Au,2549 Walt Wa Apt D1,m@augu.edu,(706) 916-4817,021341,GA,339060
1973-11-16,183-54-5013,Carl,,Thom,30093,Norcross,1021 Ri Rid Drive,,,,,339059

当应该删除带有103-54-7013的第 2行时。我在 awk 上做错了什么?

标签: pythoncsvawktext-processing

解决方案


这个 awk 有效:

awk -F, 'NR==FNR{seen[$2]; next} !($2 in seen)' f1 f2 

印刷:

1967-05-08,583-50-3833,Trac,Mich,Ewell,3000,Cumming,3830 Man Rid Driv,tracey@gmail.com,(111) 123-4567,0123,GA,339061
1973-11-16,183-54-5013,Carl,,Thom,30093,Norcross,1021 Ri Rid Drive,,,,,339059

您的 awk似乎也可以正常工作。您确定它是简单的 csv,分隔符中没有空格吗?


推荐阅读