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脚本统计文件中单词的个数的主要内容,如果未能解决你的问题,请参考以下文章