您的位置 首页 > 娱乐休闲

SHELL教学:awk或shell脚本统计日志文件中字母个数

通过shell教大家一些shell中通常用法。

最简单的写法是使用awk 中的for循环,配合sort排序,uniq -c 来统计。

方法一:

awk写法--awk 是shell中非常流行的文本分析工具,跟sed在shell占据了半个天下,可以这么说。所以学好sed awk 基本你的脚本编程可以完成百分之五十。

awk -F "" '{for (i=1;i<=NF;i++) print $i }' |sort|uniq -c

#解释下上面的命令意思:

-F 是awk根据什么来分隔,这里是空意思就是我把一个个字母都分割开了,然后用NF(NF表示每行的字段数量,即被-F分割后的字段有多少个)这个awk中的常用变量,一个个字幕都输出出来,然后排序,使用uniq -c 来统计 排重后字母的个数 ,然后输出显示。这个对于不理解awk的初学者来说可能初次理解比较困难。万事开头难,平日工作中多多看awk,慢慢跟他熟悉了 ,会用了,你就会渐渐喜欢用它来解决你工作中的各种问题。

举个awk的简单例子,慢慢从简单使用,逐步提升难度:比如 有一个这样的文件

#cat

1 abc 192.168.0.1

2 ddd 192.168.0.3

3 fffa 10.0.0.3

我想把ip地址取出来 怎么处理;

awk '{print $3}' 即可。

#awk 默认 -F分割的是空格和tab 所以这里有空格的话可以不用-F,print是输出。 $3 是分割之后,的第三部分 $1,$2, 就是第一部分第二部分,$0 则是输出所有。

方法二:

#/bin/bash

echo $1 #$1这个我在上一篇文章中国年分享过,表示执行当前脚本的第一个参数。不明白的同学可以留言,或者找下我发的上一篇文章。

#这里我写了一个Account统计的方法,然后下面通过方法名 Account 调用 即可。

Acount(){

RESD=/tmp/test/result #结果目录

RES=/tmp/test/temp #结果临时目录

echo > $RESD #写空进结果文件

echo > $RESD

tr -c '[A-Z][a-z]' '[\012*]' < $1 > $RES

echo `cat $RES`

cat $RES|while read line

do

RES1=`echo $line| awk '{print length($0)}'`

for i in $(seq 0 $RES1) #seq 就是从0到$RES1的集合。

do

if [ $i -lt $RES1 ];then

#echo ${line:$i:1} '=' `grep -c ${line:$i:1} $RES` >> $RESD

echo ${line:$i:1} '=' `grep -o ${line:$i:1} $RES|wc -l` >> $RESD #截取字母然后查找这个字母的数量

fi

#echo `grep -c $i $RES`

done

done

}

echo 'Begin counting!!!'

read -p "input:" n

Acount $n; 这里方法调用

echo `cat $RESD |sort|uniq`

rm -rf $RESD $RES

#欢迎各位疑问留言,或者提想了解的技术内容,我下次文章中分享一些见解给大家。

责任编辑: 鲁达

1.内容基于多重复合算法人工智能语言模型创作,旨在以深度学习研究为目的传播信息知识,内容观点与本网站无关,反馈举报请
2.仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证;
3.本站属于非营利性站点无毒无广告,请读者放心使用!

“SHELL教学awk或shell脚本统计日志文件中字母个数”边界阅读