详解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包含正则表达式所匹配内容的长度
统计特定文件中的词频
egrep -o “\b[[:alpha:]]+\b” $filename只用于输出单词。用 -o选项打印出由换行符分隔的匹配字符序列。这样我们就可以在每行中列出一个单词。
\b 是单词边界标记符。[:alpha:] 是表示字母的字符类。awk命令用来避免对每一个单词进行迭代。因为awk默认会逐行执行{}块中的语句,所以我们就不需要再为同样的事编写循环了。借助关联数组,当执行count[$0]++时,单词计数就增加。最后,在END{}语句块中通过迭代所有的单词,就可以打印出单词及它们各自出现的次数。
特殊变量
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{}语句块中通过迭代所有的单词,就可以打印出单词及它们各自出现的次数。
相关文章推荐
- 详解Shell脚本:sed命令工具 ,awk命令工具
- shell 脚本之 cut awk sed 命令详解
- shell脚本之正则表达式、函数、grep、sed、awk、printf等基本命令配置详解
- centos shell编程5 LANMP一键安装脚本 lamp sed lnmp 变量和字符串比较不能用-eq cat > /usr/local/apache2/htdocs/index.php <<EOF重定向 shell的变量和函数命名不能有横杠 平台可以用arch命令,获取是i686还是x86_64 curl 下载 第三十九节课
- 第二节:思维导图学习Shell脚本编程之命令之美
- linux shell 脚本攻略学习20--awk命令入门详解
- linux awk时间计算脚本及awk命令详解
- Linux-Shell脚本编程-学习-6-Shell编程-使用结构化命令-文件比较-case编程
- 第四章 shell学习之sed命令和awk编程
- shell脚本--检查文件是否存 cut命令详解
- 一天一个shell命令 linux文本内容操作系列-awk命令详解
- shell脚本命令test详解
- Shell脚本编程——了解你的Linux系统必须掌握的20个命令
- Linux Shell脚本入门--awk命令详解
- Shell脚本编程——了解你的Linux系统必须掌握的20个命令
- Linux 命令详解(十)Shell脚本的数组详解
- mktemp命令_Linux mktemp 命令用法详解:创建临时文件供shell脚本使用
- linux通过awk命令,查询日志,分析数据,获取平均时间shell脚本
- Shell脚本编程基础 四 更多的结构化命令
- centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件、目录属性 shell数组简单用法 $( ) 和${ } 和$(( )) 与 sh -n sh -x sh -v 第三十五节课