代码之家  ›  专栏  ›  技术社区  ›  erotsppa

如何编写筛选行并对其进行计数的shell脚本?

  •  2
  • erotsppa  · 技术社区  · 15 年前

    我有这样的文本文件:

    Apple
    Orange
    Orange
    Banana
    Banana
    Orange
    Banana
    Orange
    Apple
    Orange
    

    我想在运行bash shell脚本后生成以下输出:

    Apple: 2
    Orange: 5
    Banana: 3
    

    如果我使用一个完整的语言,如Java/C++等,它是非常标准的东西,但是用shell脚本/命令行来做它最快的方法是什么?

    4 回复  |  直到 15 年前
        1
  •  13
  •   Cascabel    15 年前
    sort $FILE | uniq -c
    

    会给你

    2 Apple
    3 Banana
    5 Orange
    
        2
  •  4
  •   rangalo    15 年前

    排序文件名uniq-c awk'print$2“:”$1'

        3
  •  4
  •   Hai Vu    15 年前

    此解决方案仅使用一个工具:awk

    $ awk '{count[$0]++} END {for (c in count) {print c ": " count[c]}} ' count.txt
    Orange: 5
    Banana: 3
    Apple: 2
    
        4
  •  2
  •   NawaMan    15 年前
    uniq -c $FILE | perl -pe 's|[ ]*([0-9]+)[ ]*(.*)|\2: \1|'

    这将按照指定的方式对其进行格式化。您可以在末尾添加“排序”,也可以对其进行排序。

    编辑: 正如评论中所指出的,我对uniq犯了一个错误,所以这里是正确的。

    sort $FILE | uniq -c | perl -pe 's|[ ]*([0-9]+)[ ]*(.*)|\2: \1|'

    对不起,这个问题。