如何编写过滤行并计算它们的shell脚本?

时间:2009-09-21 21:06:04

标签: bash parsing shell text scripting

我有一个这样的文本文件:

Apple
Orange
Orange
Banana
Banana
Orange
Banana
Orange
Apple
Orange

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

Apple: 2
Orange: 5
Banana: 3

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

4 个答案:

答案 0 :(得分:13)

sort $FILE | uniq -c

会给你

2 Apple
3 Banana
5 Orange

答案 1 :(得分:4)

sort filename | uniq -c | awk'{print $ 2“:”$ 1}“

答案 2 :(得分:4)

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

$ awk '{count[$0]++} END {for (c in count) {print c ": " count[c]}} ' count.txt
Orange: 5
Banana: 3
Apple: 2

答案 3 :(得分:2)

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

这会将其格式化为指定的方式。你可以添加'|排序'最后也排序。

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

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

抱歉这个问题。