您的位置:首页 > 运维架构 > Shell

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

2018-02-23 23:27 603 查看
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{}语句块中通过迭代所有的单词,就可以打印出单词及它们各自出现的次数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐