吾日三省吾身,想出类拔萃,要把知识学牢,学全,学深,学广。
我有一个文件,我想知道里面出现了多少个单词,多少个字母。以/etc/passwd为例。
(文末有总结!!)
先说如何查找单词,我们首先进行cat,查看文件。
cat /etc/passwd #查看该文件
发现里面有冒号,斜线,横杠,0-9的数字和字母x,所以,先把这些替换为空,通过管道符接cat的数据并传递给tr(横杠是后来才发现的,所以只在代码上有体现,图片中没有显示)
cat /etc/passwd | tr ":/[0-9]x-" " "
用xagrs -n1,把他们放到1列。
cat /etc/passwd | tr ":/[0-9]x-" " " | xargs -n1
咱们先排个序,直接后面跟sort
cat /etc/passwd | tr ":/[0-9]x-" " " | xargs -n1 | sort
排好序后,用uniq进行去重并统计
cat /etc/passwd | tr ":/[0-9]x-" " " | xargs -n1 | sort | uniq -c
再用sort排一次序,通过数字排序,把出现次数多的拍到前面。
搞定,统计单词,这就算结束了。
cat /etc/passwd | tr ":/[0-9]x-" " " | xargs -n1 | sort | uniq -c | sort -rn
接下来介绍如何统计字母,两种方法,第一种。
cat读取,然后tr进行替换,因为是统计字母,所以x就不进行替换了。
cat /etc/passwd | tr ":/[0-9]-" " "
咱们先将他们排成1列。
cat /etc/passwd | tr ":/[0-9]-" " " | xargs -n1
我们直接通过grep过滤,将匹配到的内容输出,可以用.匹配一个非换行符的字符,现在只剩字母了,也就是匹配现在所有的字符就是匹配字母了,其实grep . -o也有排序功能,之所以先排序的原因是因为用grep . -o会把空格也排序了,咱们不需要统计空格。
cat /etc/passwd | tr ":/[0-9]-" " " | xargs -n1 | grep . -o
到这里先排序,方便去重,再去重统计,并按出现次数排序,到这里就搞定了。
cat /etc/passwd | tr ":/[0-9]-" " " | xargs -n1 | grep . -o | sort | uniq -c | sort -rn
第二种方法是不用.进行匹配,而是用[a-z],省略了tr替换等步骤。
首先我们cat读取,然后用grep排序输出。
cat /etc/passwd | grep [a-z] -o
到这里先排序,方便去重,再去重统计,并按出现次数排序,同样搞定!
cat /etc/passwd | grep [a-z] -o | sort | uniq -c | sort -rn
总结如下:
找字母及出现次数: cat /etc/passwd | tr ":/[0-9]x-" " " | xargs -n1 | sort | uniq -c | sort -rn 找单词及出现次数: 方法1: cat /etc/passwd | tr ":/[0-9]-" " " | xargs -n1 | grep . -o | sort | uniq -c | sort -rn 方法2: cat /etc/passwd | grep [a-z] -o | sort | uniq -c | sort -rn
我是koten,10年运维经验,持续分享运维干货,感谢大家的阅读和关注!