awk功能强大,在这里记录下<shell脚本专家指南>学习的简单例子,以便日后之用。

awk用法

例:抽取多个输入域并重新排序

[root@master ~]# VAR="The quick brown fox jumped over the lazy dog."
[root@master ~]# echo $VAR
The quick brown fox jumped over the lazy dog.
[root@master ~]# echo $VAR | awk '{print $1,$8,$4,$5,$6,$7,$3,$9}'
The lazy fox jumped over the brown dog.

例:指定域分隔符


[root@master ~]# echo $VAR |awk -F o '{print $1}'   指定o为域的分隔符
The quick br

例:几个值的匹配域

[root@master ~]# awk '$1 ~ /^127|^192/ {print $0}' /etc/hosts
127.0.0.1       localhost.localdomain   localhost
192.168.4.44    www.chongining.com

例:确定域的数目及最后一个域


[root@master ~]# echo $VAR
The quick brown fox jumped over the lazy dog.
[root@master ~]# echo $VAR | awk '{print NF}'
9
[root@master ~]# echo $VAR | awk '{print $NF}'
dog.
[root@master ~]# echo $VAR | awk '{print $(NF-1)}'
lazy

例: 给awk传送变量


[root@master ~]# TheCount=3
[root@master ~]# echo $VAR | awk '{print $counter}' counter=$TheCount
brown

例: 显示域的范围


[root@master ~]# echo $VAR
The quick brown fox jumped over the lazy dog.
[root@master ~]# echo $VAR | awk '{for (i=3;i<=NF;i++){printf "%s ", $i};print ""}'
brown fox jumped over the lazy dog.
[root@master ~]# end=6
[root@master ~]# echo $VAR | awk '{for (i=3;i<='$end';i++){printf "%s ",$i};print ""}'
brown fox jumped over

例: 使用awk确定串的长度


[root@master ~]# echo $VAR |awk '{print length}'
45
[root@master ~]# expr length "$VAR"
45

例:显示一个子串

[root@master ~]# echo $VAR | awk '{print substr ($3,2,4)}'
rown
[root@master ~]# expr substr "$VAR" 12 5
rown

例:使用awk进行列求和计算

[root@master opt]# ls -l *.rpm | awk '{total+=$5} END {print total/1024/1024}'
18.0105

例:使用awk产生随机数

[root@master opt]# echo | awk '{srand();print int(100*rand())}'
38

注:产生0-100之间的一个随机数