shell脚本专家指南--单行文本处理awk

sed,awk,grep是unix主要的文本处理工具

一.awk
显示域
VAR="The quick brown fox jumped over the lazy dog"
echo $VAR|awk '{print $1,$2}'
#指定域分隔符
echo $VAR|awk -Fo '{print $1}'

grep命令能返回给定串匹配的行
awk能返回特定域中与特定值匹配的行

#显示/etc/hosts文件中第二个域等于casper串的所有行
awk '$2 == "casper" {print $0}' /etc/hosts

#查找以127开始,或者172开始的记录
"~" 模式匹配操作符
"!~" 否定模式匹配操作符
awk '$1 ~ /^127|^172/ {print $0}' /etc/hosts
#确定域的数目
echo $VAR|awk '{print NF}'
#确定最后一个域
echo $VAR|awk '{print $NF}'
#确定倒数第二个域
echo $VAR|awk '{print $NF}'

给awk传送变量:
在运行时,次知道所需要的域
Thecount=3
echo $VAR|awk -v counter=$Thecount '{print $counter}'
-v 是对变量赋值的比较新的选项,程序要求移植时,需要下面技巧
Thecount=3
echo $VAR|awk '{print $counter}' counter=$Thecount
在一定条件下面给awk传送的变量
第二个域为quick 才输出第三个域
echo $VAR|awk -v NODE="quick" '$2 == NODE{print $3}'
显示域的范围
第三个开始,以NF为结束
echo $VAR|awk '{for(i=3;i<=NF;i++) {printf "%s ",$i};print ""}'
按输入参数范围
echo $VAR|awk '{for(i=3;i<='$send';i++) {printf "%s ",$i}}'
确定串的长度
echo $VAR | awk '{print length}'
使用expr确定串长度
expr length "$VAR"
显示一个子串
awk内嵌函数
substr(string,子串第一个字符所在位置,子串的字符数)
echo $VAR | awk '{print substr($3,2,3)}'
expr显示一个子串
expr substr "$VAR" 12 4

你可能感兴趣的:(shell脚本)