awk入门

linux系统管理 struggling 1128次浏览 1个评论
<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>

DevOps-田飞雨 》》转载请注明源地址
喜欢 (0)or分享 (0)
发表我的评论
取消评论
*

表情 贴图 加粗 链接 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(1)个小伙伴在吐槽
  1. 好文章,内容文笔极佳.禁止此消息:nolinkok@163.com 荷兰网 http://www.zhongguohelanwang.com/
    匿名2015-05-09 20:36 回复