shell脚本统计文件中单词的个数

Posted 李小期的测试笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本统计文件中单词的个数相关的知识,希望对你有一定的参考价值。

文件:words.txt

内容:

the day is sunny the the

the sunny is is

需求:

统计文件中每个单词出现的次数

思路:

其实刚开始没有思路,在leetcode上看到的这道题,

cat words.txt | 

awk '{for(i=1;i<=NF;i++)array[$i]++}END{for(i in array){print i,array[i]}}'

这是那行命令,我试着来简单分析一下。

awk,格式化文本处理,NF属于内置变量,代表每行中的字段个数

可以试一下

cat words.txt | awk '{print NF}'

输出结果如下:

6

4

cat words.txt | 

awk '{for(i=1;i<=NF;i=i+1)print i}'

对文件中的每一行都会执行for循环,结果如下:

1

2

3

4

5

6

1

2

3

4

在awk中可以使用数组,awk的数组和别的语言的数据不一样,别的语言,比如C语言,它的下标是整数,0123什么的。

在awk中,数组的下标可以是字符串,这。。。是不是刷新了自己的认识,反正是刷新了我的认识。

cat words.txt | 

awk '{for(i=1;i<=NF;i=i+1)array[$i]++}'

$i代表每一行中的第几个字段

对文件中的每一行都执行for循环,数组元素的初始值为0for循环中,遇到下标相同的元素,该下标对应的值就会加1

cat words.txt | 

awk '{for(i=1;i<=NF;i++)array[$i]++}END{for(i in array)print i,array[i]}'

对文件所有行执行完for循环,最后再执行END中的遍历数组,下标为文件中的单词,值为单词的个数

结果如下:

day 1

the 4

sunny 2

is 3

以上是关于shell脚本统计文件中单词的个数的主要内容,如果未能解决你的问题,请参考以下文章

Shell脚本实现MapReduce统计单词数程序

求助Linux,编写Shell脚本程序统计指定目录中普通文件的个数及其总的大小

shell脚本实现统计目录下(包括子目录)所有文件的个数

如何用shell脚本统计出当前目录下子目录,还有所有可读,可写,可执行的文件的个数

shell之词频统计

linux shell脚本中如何统计某一行中某字符出现的个数