我在Linux中有一个包含字符串的文件:
CALLTMA
Starting
Starting
Ending
Starting
Ending
Ending
CALLTMA
Ending
我需要任何字符串的数量(FE。#Ending,#Starting,#CALLTMA)。在我的例子中,我需要获得:
CALLTMA : 2
Starting: 3
Ending : 4
执行3个命令时,我可以获得此输出:
grep -i "Starting" "/myfile.txt" | wc -l
grep -i "Ending" "/myfile.txt" | wc -l
grep -i "CALLTMA" "/myfile.txt" | wc -l
我想知道是否可以仅使用一个命令获得相同的输出。
我尝试运行此命令
grep -iE "CALLTMA|Starting|Ending" "/myfile.txt" | wc -l
但是这回归了巧合。感谢您的帮助。
答案 0 :(得分:3)
使用sort
和uniq
:
sort myfile.txt | uniq -c
-c
将计数添加到唯一行。如果要按频率对输出进行排序,请添加
| sort -n
到最后(如果你想要降序,则改为-nr
。)
答案 1 :(得分:2)
一种处理此问题的简单方法:
awk '{counts[$1]++} END{for (c in counts) print c, counts[c]}' file
Starting 3
Ending 4
CALLTMA 2
答案 2 :(得分:0)
grep -c
会奏效。你可以把它们放在一个简短的脚本中:
for i in Starting CALLTMA Ending; do
printf "%-8s : %d\n" "$i" $(grep -c "$i" file.txt)
done
(要将参数作为参数输入,只需使用参数数组作为循环列表,例如for i in "$@"; do
)
<强>输出强>
Starting : 3
CALLTMA : 2
Ending : 4