通过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
#欢迎各位疑问留言,或者提想了解的技术内容,我下次文章中分享一些见解给大家。