请输入图片描述
吾日三省吾身,想出类拔萃,要把知识学牢,学全,学深,学广。
我有一个文件,我想知道里面出现了多少个单词,多少个字母。以/etc/passwd为例。

(文末有总结!!)

先说如何查找单词,我们首先进行cat,查看文件。

cat /etc/passwd        #查看该文件

2023-11-06T03:45:22.png

发现里面有冒号,斜线,横杠,0-9的数字和字母x,所以,先把这些替换为空,通过管道符接cat的数据并传递给tr(横杠是后来才发现的,所以只在代码上有体现,图片中没有显示)

cat /etc/passwd | tr ":/[0-9]x-" " "

2023-11-06T03:46:03.png

用xagrs -n1,把他们放到1列。

cat /etc/passwd | tr ":/[0-9]x-" " " | xargs -n1

2023-11-06T03:46:59.png

咱们先排个序,直接后面跟sort

cat /etc/passwd | tr ":/[0-9]x-" " " | xargs -n1 | sort

2023-11-06T03:48:38.png

排好序后,用uniq进行去重并统计

cat /etc/passwd | tr ":/[0-9]x-" " " | xargs -n1 | sort | uniq -c

2023-11-06T03:50:08.png

再用sort排一次序,通过数字排序,把出现次数多的拍到前面。

搞定,统计单词,这就算结束了。

cat /etc/passwd | tr ":/[0-9]x-" " " | xargs -n1 | sort | uniq -c | sort -rn

2023-11-06T03:55:02.png

接下来介绍如何统计字母,两种方法,第一种。

cat读取,然后tr进行替换,因为是统计字母,所以x就不进行替换了。

cat /etc/passwd | tr ":/[0-9]-" " "

2023-11-06T03:56:39.png

咱们先将他们排成1列。

cat /etc/passwd | tr ":/[0-9]-" " " | xargs -n1

2023-11-06T03:57:10.png

我们直接通过grep过滤,将匹配到的内容输出,可以用.匹配一个非换行符的字符,现在只剩字母了,也就是匹配现在所有的字符就是匹配字母了,其实grep . -o也有排序功能,之所以先排序的原因是因为用grep . -o会把空格也排序了,咱们不需要统计空格。

cat /etc/passwd | tr ":/[0-9]-" " " | xargs -n1 | grep . -o

2023-11-06T03:57:52.png

到这里先排序,方便去重,再去重统计,并按出现次数排序,到这里就搞定了。
2023-11-06T03:58:23.png

第二种方法是不用.进行匹配,而是用[a-z],省略了tr替换等步骤。

首先我们cat读取,然后用grep排序输出。

cat /etc/passwd | grep [a-z] -o

2023-11-06T03:59:00.png

到这里先排序,方便去重,再去重统计,并按出现次数排序,同样搞定!

cat /etc/passwd | grep [a-z] -o | sort | uniq -c | sort -rn

2023-11-06T03:59:31.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

持续分享运维干货,感谢大家的阅读和关注!

发表评论

召唤看板娘