【问题标题】:Find most frequent line in file in bash在bash中查找文件中最常见的行
【发布时间】:2018-05-31 03:01:24
【问题描述】:

假设我有一个类似如下的文件:

Abigail 85
Kaylee 25
Kaylee 25
kaylee
Brooklyn
Kaylee 25
kaylee 25

我想找到重复次数最多的行,输出必须是该行。

我试过了

sort list | uniq -c

但我需要干净的输出,只需要最重复的行(在此示例中为 Kaylee 25)。

【问题讨论】:

标签: bash lines


【解决方案1】:

改善~

$ sort zlist | uniq -c | sort -r | head -1|  xargs | cut -d" " -f2-

Kaylee 25

这有帮助吗?

【讨论】:

  • 我认为这里不需要调用xargs
  • xargs .... 抑制空格,简单明了。如果你喜欢,你也可以使用翻译!
  • xargs 也会抑制有效的连续空格。您可能需要删除xargs 并使用sed s/^\s\+[0-9]\+\s//' 等其他方法来删除计数列而不是cut
  • 使用sort --version-sort 而不是sort -r。例如,--version-sort 将正确输出“351,51,5”,而-r 将输出“5,351,51”。
  • 请注意,此解决方案是错误的,因为第二个sort 没有-n(由answer below 指出)
【解决方案2】:

恕我直言,这些答案都不能正确排序结果。原因是排序,没有-n,选项将像这样“1 10 11 2 3 4”等排序,而不是“1 2 3 4 10 11 12”。所以,像这样添加-n

sort zlist | uniq -c | sort -n -r | head -1

当然,您可以将其通过管道传输到 xargs 或 sed,如前所述。

【讨论】:

    【解决方案3】:

    awk-

    awk '{a[$0]++; if(m<a[$0]){ m=a[$0];s[m]=$0}} END{print s[m]}' t.lis
    

    【讨论】:

    • 有趣且不同的解决方案。
    【解决方案4】:
    $ uniq -c list | sort -r | head -1 | awk '{$1=""}1'
    
    Kaylee 25
    

    这就是你要找的吗?

    【讨论】:

      猜你喜欢
      • 2015-06-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-30
      • 2014-09-24
      • 1970-01-01
      • 1970-01-01
      • 2012-08-27
      • 2013-02-21
      相关资源
      最近更新 更多