查找CSV文件中重复项的脚本

16 投票
5 回答
46080 浏览
提问于 2025-04-16 06:33

我有一个40MB的csv文件,里面有50,000条记录。这是一个巨大的产品列表。每一行大约有20个字段,比如[商品编号、UPC、描述等等]

我想知道,

a) 如何找到并打印出重复的行。[这个文件是一个很大的追加文件,所以里面有多个标题,我需要先找到确切的重复行,然后再去掉这些标题。]

b) 如何根据某一列找到并打印出重复的行。[比如看看一个UPC是否被分配给了多个产品]

我需要在服务器上运行这个命令或脚本,我已经安装了Perl和Python。bash脚本或命令对我来说也可以。

我不需要保留行的顺序等等。

我尝试过,

sort largefile.csv | uniq -d

来获取重复的行,但结果并不是我预期的。

理想情况下,我希望能用bash脚本或命令,但如果有人有其他建议,那也非常好。

谢谢


查看: 在Python中从大文件中删除重复行,在Stack Overflow上

5 个回答

2

你可以使用SQLite的命令行工具来导入你的csv文件,并创建索引,这样可以让你执行SQL命令的时候更快。

14

在Perl中查找并打印重复的行:

perl -ne 'print if $SEEN{$_}++' < input-file

在Perl中查找并打印有重复列的行——假设我们要查找的是用逗号分隔的第5列:

perl -F/,/ -ane 'print if $SEEN{$F[4]}++' < input-file
17

试试下面这个方法:

# Sort before using the uniq command
sort largefile.csv | sort | uniq -d

uniq 是一个非常基础的命令,它只会报告相邻的内容是否重复。

撰写回答