Linux 使用grep命令获取多个模式的一致性总数
我在Linux中有一个文件包含字符串: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
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工具。它有一个用于计算文件中唯一项的标志。它有一个用于计算文件中唯一项的标志。