Shell gawk统计文件的各个单词数

通过gawk 命令对文件进行统计各个单词数

gawk 'BEGIN{

    FS=" "
}
{
    arr=NF
    for (i=1; i<= arr; i++)
    {
        varr[$i]=varr[$i]+1
    }
}
END{
    for (test in varr)
    {
        print test, varr[test]
    }
}' datafile
  1. datafile的内容是以空格分开,使用输入字段分割符FS来区分每一行的单词;
  2. 通过使用内建变量NF(当前行的字段总数);
  3. 通过使用以单词作为索引的数组,累加;
  4. 通过END输出数组和index就可得到

测试

cat datafile
This is the header line.
This is the first data line.
This is the second data line.

This is the last line.

运行上述gawk
运行结果

first 1
line. 4
the 4
This 4
last 1
second 1
data 2
header 1
is 4

如果需要将输出按照降序排列,可以把

print test, varr[test]

改为

print varr[test], test

然后通过管道

gawk 'BEGIN{

    FS=" "
}
{
    arr=NF
    for (i=1; i<= arr; i++)
    {
        varr[$i]=varr[$i]+1
    }
}
END{
    for (test in varr)
    {
        print varr[test], test
    }
}' datafile | sort -n -r | gawk '{print $2, $1}'

运行结果:

This 4
the 4
line. 4
is 4
data 2
second 1
last 1
header 1
first 1

这就是通过gawk命令对文件进行统计各个单词的方法

你可能感兴趣的:(Linux,shell,linux)