通过awk对文本文件的单词出现次数进行排序

本文介绍如何利用awk脚本统计文本文件中单词的出现次数。从test.awk到test3.awk,逐步讲解如何实现不同需求,包括统计所有单词的总数,按出现次数逆序排列,以及特定字符和特定单词的计数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

test.awk : 完成统计文件中相同单词出现的次数,打印出现次数最多的单词和该单词出现的次数

#!/bin/awk -f
#author:dcddc
#data:2014/5/14 01:38

BEGIN{
RS=" "
}                          #设置输入记录分割符RS为空格,又输入字段分割符FS也为空格,所以每个单词表示一个记录
{for(i=1;i<=NF;i++) a[$i]++;}   #数组的下标为字段值,该下标对应的值为该字段出现>的次数,因为字段值相同则下标也相同
                                #功能是统计内容相同字段出现的次数
END{                            #功能是打印出现频率最高的字段的值和出现的次数
for(i in a){ if(a[i]>max) max=a[i]; } print"出现的次数:" max          #i是下标,这里下标>对应$i,数组的值为$i出现的次数,max为数组里最大的值即重复出现最多的次数

for(i in a){ if(a[i]==max) val=i; } print"该单词为:" val                    #i是下标,这里下标对应$i,数组的值为$i出现的次数,max为数组里最大的值即重复出现最多的次数
}


test1.awk : 完成统计文件中相同单词出现的次数,按次数逆序排列打印单词和单词出现的次数

#bin/awk -f
#author:dcddc
#data:2014/5/14 01:38

BEGIN{
RS=" "
}                          #设置输入记录分割符为空格,又因为输入字段分割符FS默认也为空格,
                           #这样做就使得一条记录只有一个字段$1,即1个单词表示一条记录,NF=1
{for(i=1;i<=NF;i++) a[$i]++;}   #数组的下标为字段值,该下标对应的值为该字段出现>的次数,因为字段值相同则下标也相同
                                #功能是统计内容相同字段出现的次数
END {                   #功能是打印出现频率最高的字段的值和出现的次数
  for(i in a) print i , a[i] |  "sort -r -n -k2"
}                       #-r:逆序排列 -n:对数字排列 -k2:对输出的第二个元素排列

#如果你想打印前n行,请把结果输出重定向到另一个文件,然后print前n行即可
#可以这么做 awk -f test1.awk rfc2620.txt > rfc.txt
#awk 'NR==1,NR==5{print $0}' rfc.txt


test2.awk : 统计某个匹配字符在文本文件中出现的次数并将结果打印,如对于匹配字符the,allofthe即表示匹配字符出现1次

#!/bin/awk -f
#/bin/bash
BEGIN{RS=" "}
/a/{num++}       #匹配字符可任意修改,这里匹配字符为a
END{ print num}

test3.awk : 统计特定单词在文本文件中出现的次数

#!/bin/awk -f
#function:统计指定单词在文件中出现的次数

BEGIN{ RS=" "}
{for(i=1;i<=NF;i++) a[$i]++}
END{ print a["the"] }        #可以在这里任意修改想指定的单词,这里指定单词为the




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值