详解shell脚本(九)——awk命令编程

awk命令编程

特殊变量

  • NR: 表示记录数量,在执行过程中对应当前行号
  • NF:表示字段数量,在执行过程中对应当前行的字段数
  • $0:这个变量包含执行过程中当前行的文本内容
  • $1:这个变量包含第一个字段的文本内容
  • $2:这个变量包含第二个字段的文本内容

awk内建的字符串控制函数

  • length(string): 返回字符串的长度
  • index(string, search_string):返回search_string在字符串出现的位置
  • split(string, array, delimiter):用定界符生成一个字符串列表,并将该列表存入数组
  • substr(string, start-position, end-position): 在字符串中用字符起止偏移量生成子串,并返回该子串
  • sub(regex, replacement_str, string): 将正则表达式匹配到第一处内容替换成replacment_str.
  • gsub(regex,replacement_str, string): 和sub()类似。不过该函数会替换正则表达式匹配到的所有内容
  • match(regex, string): 检查正则表达式是否能够匹配字符串。如果能够匹配,返回非0值;否则,返回0.math()有两个相关的特殊变量,分别是RSTART和RLENGTH.变量RSTART包含正则表达式所匹配内容的起始位置,而变量RLENGTH包含正则表达式所匹配内容的长度

统计特定文件中的词频

#!/bin/bash
#用途:计算文件中单词的词频

if [ $# -ne 1 ];
then
    echo "Usage: $0 filename";
    exit -1
fi

filename=$1

egrep -o "\b[[:alpha:]]+\b" $filename | \

awk '{ count[$0]++ }
END{ printf("%-14s%s\n","Word","Count") ;
for(ind in count)
{ printf("%-14s%d\n",ind,count[ind]); }
}'

egrep -o “\b[[:alpha:]]+\b” $filename只用于输出单词。用 -o选项打印出由换行符分隔的匹配字符序列。这样我们就可以在每行中列出一个单词。

\b 是单词边界标记符。[:alpha:] 是表示字母的字符类。awk命令用来避免对每一个单词进行迭代。因为awk默认会逐行执行{}块中的语句,所以我们就不需要再为同样的事编写循环了。借助关联数组,当执行count[$0]++时,单词计数就增加。最后,在END{}语句块中通过迭代所有的单词,就可以打印出单词及它们各自出现的次数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值