awk工具

1.命令功能

awk不仅是一个文本处理工具,还是一种编程语言,用来生成报告(excel),awk的功能要比grep、sed更强大。

2.语法格式

awk  [option]  ‘pattern{action}’  file

awk    选项    ‘条件{动作}’    文件

选项说明

参数选项

参数选项说明

-F

指定字段分隔符  *****

-v

定义或修改一个awk内部变量****

 

常用awk内置变量

变量名

属性

$0

当前记录

$1~$n

当前记录的第n个字段

FS

输入字段分隔符 默认是空格

RS

输入记录分隔符 默认是换行符

NF

当前记录中的字段个数 就是有多少列

NR

表示行号,从1开始。 NR==5 表示第5行

0FS

输出字段分隔符 默认也是空格

0RS

输出的记录分隔符 默认为换行符

 

awk支持的运算符

 

   Patterns

       AWK patterns may be one of the following:

 

              BEGIN

              END

              /regular expression/           #正则表达式

              relational expression           #关系表达式

              pattern && pattern           #逻辑与

              pattern || pattern             #逻辑或

              pattern ? pattern : pattern     #三目运算符

              (pattern)

              ! pattern

              pattern1, pattern2

 

 3.使用范例

测试文件

[root@localhost ~]# cat -n test.txt 
     1  root:x:0:0:root:/root:/bin/bash
     2  bin:x:1:1:bin:/bin:/sbin/nologin
     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4  adm:x:3:4:adm:/var/adm:/sbin/nologin
     5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     6  sync:x:5:0:sync:/sbin:/bin/sync
     7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8  halt:x:7:0:halt:/sbin:/sbin/halt
     9  mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    10  uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
    11  operator:x:11:0:operator:/root:/sbin/nologin
    12  games:x:12:100:games:/usr/games:/sbin/nologin
    13  gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
    14  ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

示例1 输出第2行到第5行内容

[root@localhost ~]# awk 'NR==2,NR==5' test.txt 
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@localhost ~]# cat -n test.txt |awk 'NR==2,NR==5'   #通过cat –n给每行标上行号
     2  bin:x:1:1:bin:/bin:/sbin/nologin
     3  daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4  adm:x:3:4:adm:/var/adm:/sbin/nologin
     5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

示例2 通过awk给每行标识上行号

[root@localhost ~]# awk '{print NR,$0}' test.txt 
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
......

示例3 awk给第2行到第5行标上行号

[root@localhost ~]# awk 'NR==2,NR==5 {print NR,$0}' test.txt 
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

示例4 显示test.txt文件的第1列,第5列和最后一列

[root@localhost ~]# awk -F ":" '{print $1,$5,$NF}' test.txt 
root root /bin/bash
bin bin /sbin/nologin
daemon daemon /sbin/nologin

显示第2行 到第4行的第1列,第5列和最后一列,并打印行号

[root@localhost ~]# awk -F ":" '{print NR,$1,$5,$NF}' test.txt  #显示每行行号
1 root root /bin/bash
2 bin bin /sbin/nologin
3 daemon daemon /sbin/nologin
......
[root@localhost ~]# awk -F ":" 'NR==2,NR==4 {print NR,$1,$5,$NF}' test.txt #显示2~4行号
2 bin bin /sbin/nologin
3 daemon daemon /sbin/nologin
4 adm adm /sbin/nologin

示例5 把/sbin/nologin替换成/bin/no

[root@localhost ~]# awk '{gsub("/sbin/nologin","/bin/no",$0);print $0}' test.txt 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/no
daemon:x:2:2:daemon:/sbin:/bin/no
adm:x:3:4:adm:/var/adm:/bin/no
lp:x:4:7:lp:/var/spool/lpd:/bin/no

gsub语法格式:

gsub(“替换对象”,“替换内容”,哪一列)

示例6 取出网卡的IP地址

[root@localhost ~]# ifconfig eth0 |awk -F "(addr:)|(Bcast:)" 'NR==2 {print $2}'
172.16.2.10
posted @ 2018-05-06 23:03  joe.chu  阅读(191)  评论(0编辑  收藏  举报