我有一个这样的文本文件:
Apple
Orange
Orange
Banana
Banana
Orange
Banana
Orange
Apple
Orange
我想在运行bash shell脚本后生成以下输出:
Apple: 2
Orange: 5
Banana: 3
如果我使用像Java / C ++这样的完整语言,这是非常标准的东西但是使用shell脚本/命令行的最快方法是什么?
答案 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|'
抱歉这个问题。