<code> awk是脚本中功能非常强大的一个工具,其本身也可以为一门语言。 awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。 下面来看它的一般用法: FS:字段分隔符,默认为空格,超过一个字符时被视为正则表达式,一般简写为F。 NR:读取的行数。 NF:字段总数,$NF表示最后一个字段 $1:字段1 [root@sta ~]# echo ' asd '|awk -F' ' '{print NF ":" $1}' 1:asd [root@sta ~]# echo ' asd '|awk -F'[ ]' '{print NF ":" $1}' #' [ ] '匹配一个空格 5: 也可以用$NF打印出最后一个字段, $(NF-1)打印倒数第二个字段,其他同理。 [root@localhost test]# echo -e "line1 f2 f3\nline2 f4 f5\n "|awk '{print "line no:"NR",NF:"NF, "$0 ="$0",$1="$1",$2="$2",$3="$3}' line no:1,NF:3 $0 =line1 f2 f3,$1=line1,$2=f2,$3=f3 line no:2,NF:3 $0 =line2 f4 f5,$1=line2,$2=f4,$3=f5 line no:3,NF:0 $0 = ,$1=,$2=,$3= #打印每行的第二个和第三个字段 [root@localhost test]# echo "aa 12 12 aa"|awk '{ print $2,$3}' 12 12 #统计行数 [root@localhost test]# awk 'END{print NR}' /etc/passwd 33 #getline读取一行命令输出 [root@localhost hdu]# grep root /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin [root@localhost hdu]# echo | awk '{"grep root /etc/passwd"|getline cmd; print cmd}' root:x:0:0:root:/root:/bin/bash #当使用不带参数的print时,它会打印出当前行。 [root@localhost test]# echo -e "line1\nline2" |awk 'BEGIN {print "start"} {print} END {print "end"}' start line1 line2 en #在awk中,当使用“,”为分隔符时,参数打印时则以空格为定界符。 [root@localhost test]# echo |awk '{v1="v1";v2="v2";v3="v3"; print v1,v2,v3}' v1 v2 v3 #echo向标准输出行中写入几行,awk中的 { } 语句块就执行几次。 [root@localhost test]# echo -e "\n" |awk '{v1="v1";v2="v2";v3="v3"; print v1","v2","v3}' v1,v2,v3 v1,v2,v3 #计算累加的和 [root@localhost test]# seq 5 |awk 'BEGIN{sum=0;print "start"}{print $1"+";sum+=$1}END{print "==";print sum}' start 1+ 2+ 3+ 4+ 5+ == 15 #使用外部变量 [root@localhost test]# a=100 b=200 [root@localhost test]# echo |awk '{ print c,d}' c=$a d=$b 100 200 #行号小于3的 [root@localhost test]# awk 'NR <3' /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin #1-3行 [root@localhost test]# awk 'NR ==1,NR==3' /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin #包含root于不包含root 的行 [root@localhost test]# awk '/root/' /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin [root@localhost test]# awk '!/root/' /etc/passwd bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin #使用定界符,-F指定符号 ,以下为提取每行最后一个字段 [root@localhost test]# awk -F: '{print $NF}' /etc/passwd /bin/bash /sbin/nologin #在begin语句种子则使用FS=“定界符” [root@localhost test]# awk 'BEGIN{FS=":"} {print $NF}' /etc/passwd /bin/bash /sbin/nologin </code>
awk入门
(1)个小伙伴在吐槽
- 好文章,内容文笔极佳.禁止此消息:nolinkok@163.com 荷兰网 http://www.zhongguohelanwang.com/