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