我在搜索时找到了这个答案(在文件中查找重复的行并计算每行重复了多少次?),它解决了重复行的问题,但我有一个特殊的问题。
我需要找到具有相同行首的重复行。
例如:
2501,3,0,1,0,1457695800
2501,3,0,1,0,1457789340
2502,3,0,0,0,1457695800
2502,3,0,0,0,1457789340
2503,3,0,0,0,1457789340
2504,3,0,0,0,1457789340
2505,3,0,0,0,1457789340
在上面的 CSV 数据中,如果时间戳不存在,2501
和2502
将是重复的。
有没有办法通过仅考虑前 5 个字段(即排除时间戳)来将它们作为重复项找到?
我最终通过将一堆命令放在一起找到了答案:
cat my_file.csv | perl -p -i -n -e 's/^(.*),[0-9]{10}.+?$/$1/' | sort | uniq -d
所以基本上,步骤是:
- 使用
cat
获取文件的内容 - 通过管道将其传输到perl并使用正则表达式仅获取捕获组(在本例中为时间戳之前的所有内容)
- 通过管道将输出传送到
sort
,这将对内容进行排序 - 将
uniq
与-d
开关配合使用查找重复行
如果您愿意,还可以将结果输出到文件:
cat my_file.csv | perl -p -i -n -e 's/^(.*),[0-9]{10}.+?$/$1/' | sort | uniq -d > line_duplicates.txt
希望这有帮助。