【问题标题】:Identify duplicate lines in a file that have 2 fields using linux command line使用 linux 命令行识别文件中具有 2 个字段的重复行
【发布时间】:2016-11-16 13:19:49
【问题描述】:

我有一个由 2 个字段组成的文件,其中包含一长串条目,其中第一个字段是 id。第二个字段是计数器

我想要的是显示重复的 id

文件示例:

tXXXXXXXXXX   12345
tXXXXXXXXXX   53321
tXXXXXXXXXXXX 422642

我知道如何解决这个问题的逻辑,我需要在文件中进行迭代或循环,但我不知道如何编写命令的语法。

我会很感激任何帮助

【问题讨论】:

    标签: linux string for-loop command-line counter


    【解决方案1】:

    你可以用这个:

    perl -ne '++$i;print $i," ",$_ if $line{$_}++'  FILENAME
    

    【讨论】:

      【解决方案2】:

      如果您的意思是只需要文件中的重复 ID 列表,那么可以使用 cut、sort 和 uniq 轻松实现。

      cat <filename> | cut -f1 -d ' ' | sort | uniq -d

      如果要打印所有重复 ID 的行,可以使用以下:

      FILE=/tmp/sdhjkhsfds ; for dupe in $(cat $FILE | cut -f1 -d ' ' | sort | uniq -d); do cat $FILE | grep $dupe | awk '{print $1, $2}'; done

      【讨论】:

      • @Chris Tomlinson 如果我需要显示重复 id 的行号?
      • @devleb 那是每次重复出现的行号还是最后一个?如果有多个 ID 重复,您希望发生什么?
      • @chris tomlinson 需要显示每次出现重复的行号
      • 您能举例说明所需的输出吗?
      • 38 tXXXXXXXXX 678 tXXXXXXXXX 其中“38”和“678”是重复ID的行号(这些将是相同的ID)
      猜你喜欢
      • 2014-05-28
      • 2014-01-03
      • 2011-10-05
      • 2018-10-24
      • 1970-01-01
      • 2016-12-03
      • 1970-01-01
      • 2016-10-30
      • 1970-01-01
      相关资源
      最近更新 更多