Linux 使用grep命令获取多个模式的一致性总数

Linux 使用grep命令获取多个模式的一致性总数,linux,bash,shell,grep,Linux,Bash,Shell,Grep,我在Linux中有一个文件包含字符串: CALLTMA Starting Starting Ending Starting Ending Ending CALLTMA Ending 我需要任何字符串的数量(FE.#end、#start、#CALLTMA)。在我的例子中,我需要获得: CALLTMA : 2 Starting: 3 Ending : 4 我可以在执行3个命令时获得此输出: grep -i "Starting" "/myfile.txt" | wc -l grep -i "End

我在Linux中有一个文件包含字符串:

CALLTMA
Starting
Starting
Ending
Starting
Ending
Ending
CALLTMA
Ending
我需要任何字符串的数量(FE.#end、#start、#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

但这带来了所有的巧合。感谢您的帮助。

使用
排序
uniq

sort myfile.txt | uniq -c
-c
将计数添加到唯一行。如果要按频率对输出进行排序,请添加

| sort -n

最后(如果需要降序,请更改为
-nr

使用
排序
uniq

sort myfile.txt | uniq -c
-c
将计数添加到唯一行。如果要按频率对输出进行排序,请添加

| sort -n

最后(如果需要降序,请更改为
-nr

grep-c
将起作用。您可以用一个简短的脚本将所有内容组合在一起:

for i in Starting CALLTMA Ending; do 
    printf "%-8s  : %d\n" "$i" $(grep -c "$i" file.txt)
done
(要将搜索词作为参数输入,只需使用循环列表的参数数组,例如“$@”中i的
;do

输出

Starting  : 3
CALLTMA   : 2
Ending    : 4

grep-c
将起作用。您可以用一个简短的脚本将所有内容组合在一起:

for i in Starting CALLTMA Ending; do 
    printf "%-8s  : %d\n" "$i" $(grep -c "$i" file.txt)
done
(要将搜索词作为参数输入,只需使用循环列表的参数数组,例如“$@”中i的
;do

输出

Starting  : 3
CALLTMA   : 2
Ending    : 4

处理此问题的简单awk方法:

awk '{counts[$1]++} END{for (c in counts) print c, counts[c]}' file

Starting 3
Ending 4
CALLTMA 2

处理此问题的简单awk方法:

awk '{counts[$1]++} END{for (c in counts) print c, counts[c]}' file

Starting 3
Ending 4
CALLTMA 2

看看uniq工具。它有一个用于计算文件中唯一项的标志。它有一个用于计算文件中唯一项的标志。