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语言,它的下标是整数,0、1、2、3什么的。
在awk中,数组的下标可以是字符串,这。。。是不是刷新了自己的认识,反正是刷新了我的认识。
cat words.txt |
awk '{for(i=1;i<=NF;i=i+1)array[$i]++}'
$i代表每一行中的第几个字段
对文件中的每一行都执行for循环,数组元素的初始值为0,for循环中,遇到下标相同的元素,该下标对应的值就会加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脚本统计文件中单词的个数的主要内容,如果未能解决你的问题,请参考以下文章
求助Linux,编写Shell脚本程序统计指定目录中普通文件的个数及其总的大小