使用grep命令获取多个模式的重合总数

时间:2016-02-23 15:47:13

标签: linux bash shell grep

我在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
但是这回归了巧合。感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

使用sortuniq

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
相关问题