linux shell脚本中如何统计某一行中某字符出现的个数

linux shell脚本中如何统计某一行中某字符出现的个数,第1张

1、统计某个字符的个数,以a为例grep -o a urifleawk -F "" '{for(i=1i<=NF++i) if($i=="a") ++sum}END{print sum}' urfile #-F ""中间必须要有空格 "a"必须使用双引号,字符串 awk -F "" '{for(i=1i<=NFi++)a[$i]++}END{for(j in a) if(j=="c") print a[j]}' urfile#2、储存在变量里echo "0001111" |tr -cd 1 |wc -c如果有时间可以看看《Linux就该这么学》,里面有各种Linux相关知识

概述

使用grep可以查找包含指定字符串的文件

步骤详解

格式:

grep “要查找的字符串” 文件名

例子:

grep "192.168.0.1" /etc

文件名可以使用基本正则表达式(BRE),例如, 查找test目录下的所有文件,是否包含www.dutycode.com字符串。

grep “www.dutycode.com” /root/zzh/test/*

小贴士:使用-n 参数,可以显示字符串在文件中的行数

拓展内容

关于grep的命令的使用:

几个常用的查询指令:

1、查找时不区分字符串的大小写

grep -i “查找的字符串” 文件名  

2、查找时使用正则表达式,匹配符合的字符串

grep -e “正则表达式” 文件名  

3、查找不匹配指定字符串的行:

grep -v “被查找的字符串”  文件名  

4、查找时显示被查找字符串所在的行数

grep -n “查找的字符串” 文件名  

使用这个命令查出文本中的单词出现频率按照由高到底排序

cat words.txt |tr -cs "[a-z][A-Z]" "[\012*]"|tr A-Z a-z|sort|uniq -c|sort -k1nr -k2|head -10

但是有时我们想查找出某一个单词的出现频率这时我们可以使用如下几个命令

文件名称:file  查找单词名称:word

*** 作命令:

(1)more file | grep -o word | wc -l

(2)cat file | grep -o word | wc -l

(3) grep -o test word | wc -l

如果这些还是不能满足需求,那只能写linux脚本进行实现了。可以使用awk哦

1.命令格式:

wc [选项]文件...

2.命令功能:

统计指定文件中的字节数、字数、行数,并将统计结果显示输出。该命令统计指定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所指定文件的总统计数。

3.命令参数:

-c 统计字节数。

-l 统计行数。

-m 统计字符数。这个标志不能与 -c 标志一起使用。

-w 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。

-L 打印最长行的长度。

--help 显示帮助信息

--version 显示版本信息

4.值得注意的是,-c,c应该是count的缩写,统计的是文件的字节数,而不是通常我们想要的“字数”,字数的统计应该用-w,所以上面提到那个问题,可以怎么做呢?wc并没有提供给我们统计特定一个单词的选项,只能查找呗~所以结合grep就可以这样简单写:

grep cout hello.cpp | wc -l

5.上面命令通过管道串联起来,意思是,查找hello.cpp里所有出现过cout的行,统计行数。

但是,问题来了,如果不只想统计行数,而是想精确到个数(一行里可能会出现多次),应该怎么办呢?

这就是grep的作用了2,-o选项(only的意思)表示只选中那些匹配的地方,比如a cout yes, and b cout no.,匹配cout,结果是两行,每行一个cout。所以要想统计出现次数的话,简单加一个选项就好了:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7905783.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存