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