查找文本文件中的重复行首



我在搜索时找到了这个答案(在文件中查找重复的行并计算每行重复了多少次?),它解决了重复行的问题,但我有一个特殊的问题。

我需要找到具有相同行首的重复行。

例如:

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 数据中,如果时间戳不存在,25012502将是重复的。

有没有办法通过仅考虑前 5 个字段(即排除时间戳)来将它们作为重复项找到?

我最终通过将一堆命令放在一起找到了答案:

cat my_file.csv | perl -p -i -n -e 's/^(.*),[0-9]{10}.+?$/$1/' | sort | uniq -d

所以基本上,步骤是:

  1. 使用 cat 获取文件的内容
  2. 通过管道将其传输到perl并使用正则表达式仅获取捕获组(在本例中为时间戳之前的所有内容)
  3. 通过管道将输出传送到sort,这将对内容进行排序
  4. uniq-d开关配合使用查找重复行

如果您愿意,还可以将结果输出到文件:

cat my_file.csv | perl -p -i -n -e 's/^(.*),[0-9]{10}.+?$/$1/' | sort | uniq -d > line_duplicates.txt

希望这有帮助。

最新更新