在文本文件中查找重复的行开头

时间:2016-03-14 12:43:25

标签: count find duplicates lines

我在搜索时找到了这个答案(Find duplicate lines in a file and count how many time each line was duplicated?),它解决了重复行的问题,但我有一个特殊的问题。

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

例如:

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个字段(即不包括时间戳)来将它们视为重复项?

1 个答案:

答案 0 :(得分:0)

我最终通过一起执行一系列命令来找到答案:

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切换查找重复行
  5. 如果您愿意,也可以将结果输出到文件:

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

    希望这有帮助。