awk 使用方法

一、awk说明

参考链接
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。

简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

使用方法 : awk ‘{pattern + action}’ {filenames}
说明:
1、 pattern 表示 AWK 在数据中查找的内容
2、action 是在找到匹配内容时所执行的一系列命令
3、括号{}不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。
4、pattern就是要表示的正则表达式,用斜杠括起来。

二、awk使用实例

1、匹配包含关键字的所有行

awk '/root/' /etc/passwd

结果:

[root@iZ2ze4tgce8abomp7tyymhZ ~]# awk '/root/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
dockerroot:x:997:994:Docker User:/var/lib/docker:/sbin/nologin

2、搜索包含关键字的所有行,并输入指定列

awk -F: '/root/ {print $7}' /etc/passwd   

以:分割搜索包含root的所有行并输出第7列
结果:

[root@iZ2ze4tgce8abomp7tyymhZ ~]# awk -F: '/root/{print $7}' /etc/passwd
/bin/bash
/sbin/nologin
/sbin/nologin

3、统计/etc/passwd:文件名,每行的行号,每行的列数,对应的完整行内容:

awk -F: '{printf("filename:%3s  num:%3s  clumns:%3s  content:%3s\n",FILENAME,NR,NF,$0)}' /etc/passwd

printf格式化输出 %3s右对齐如果不够三个字符则用空格补充,%-3s左对齐
结果:

filename:/etc/passwd  num:  1  clumns:  7  content:root:x:0:0:root:/root:/bin/bash
filename:/etc/passwd  num:  2  clumns:  7  content:bin:x:1:1:bin:/bin:/sbin/nologin
filename:/etc/passwd  num:  3  clumns:  7  content:daemon:x:2:2:daemon:/sbin:/sbin/nologin
filename:/etc/passwd  num:  4  clumns:  7  content:adm:x:3:4:adm:/var/adm:/sbin/nologin
filename:/etc/passwd  num:  5  clumns:  7  content:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
filename:/etc/passwd  num:  6  clumns:  7  content:sync:x:5:0:sync:/sbin:/bin/sync
filename:/etc/passwd  num:  7  clumns:  7  content:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
filename:/etc/passwd  num:  8  clumns:  7  content:halt:x:7:0:halt:/sbin:/sbin/halt
filename:/etc/passwd  num:  9  clumns:  7  content:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
filename:/etc/passwd  num: 10  clumns:  7  content:operator:x:11:0:operator:/root:/sbin/nologin
filename:/etc/passwd  num: 11  clumns:  7  content:games:x:12:100:games:/usr/games:/sbin/nologin
filename:/etc/passwd  num: 12  clumns:  7  content:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
filename:/etc/passwd  num: 13  clumns:  7  content:nobody:x:99:99:Nobody:/:/sbin/nologin
filename:/etc/passwd  num: 14  clumns:  7  content:systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
filename:/etc/passwd  num: 15  clumns:  7  content:dbus:x:81:81:System message bus:/:/sbin/nologin
filename:/etc/passwd  num: 16  clumns:  7  content:polkitd:x:999:998:User for polkitd:/:/sbin/nologin
filename:/etc/passwd  num: 17  clumns:  7  content:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
filename:/etc/passwd  num: 18  clumns:  7  content:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
filename:/etc/passwd  num: 19  clumns:  7  content:chrony:x:998:996::/var/lib/chrony:/sbin/nologin
filename:/etc/passwd  num: 20  clumns:  7  content:ntp:x:38:38::/etc/ntp:/sbin/nologin
filename:/etc/passwd  num: 21  clumns:  7  content:tcpdump:x:72:72::/:/sbin/nologin
filename:/etc/passwd  num: 22  clumns:  7  content:nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
filename:/etc/passwd  num: 23  clumns:  7  content:dockerroot:x:997:994:Docker User:/var/lib/docker:/sbin/nologin

4、根据条件指定输出

awk -F: 'NR==2 {print $7}' /etc/passwd

说明:输出第二行的第七列
结果:

[root@iZ2ze4tgce8abomp7tyymhZ ~]# awk -F: 'NR==2 {print $7}' /etc/passwd
/sbin/nologin

5、根据条件指定输出

awk -F: '{if (NR>=2&&NR<=7) print $7}' /etc/passwd

说明:输出第2-7行的第7列内容,判断条件不要忘记加()
结果:

[root@iZ2ze4tgce8abomp7tyymhZ ~]# awk -F: '{if (NR>=2&&NR<=7) print $7}' /etc/passwd
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown

6、加入begin end(相当于加入表头和结尾)

awk -F: 'BEGIN{printf("%-5s%-20s%3s\n","num","name","shell")} {printf("%-5s%-20s%3s\n",NR,$1,$NF)} END{print"bye"}' /etc/passwd

说明:
1、printf括号不要忘记
2、printf括号里面的双引号不要忘记
3、printf后面的\n换行符不要忘记
结果:

[root@iZ2ze4tgce8abomp7tyymhZ ~]# awk -F: 'BEGIN{printf("%-5s%-20s%3s\n","num","name","shell")} {printf("%-5s%-20s%3s\n",NR,$1,$NF)} END{print"bye"}' /etc/pas   swd
num  name                shell
1    root                /bin/bash
2    bin                 /sbin/nologin
3    daemon              /sbin/nologin
4    adm                 /sbin/nologin
5    lp                  /sbin/nologin
6    sync                /bin/sync
7    shutdown            /sbin/shutdown
8    halt                /sbin/halt
9    mail                /sbin/nologin
10   operator            /sbin/nologin
11   games               /sbin/nologin
12   ftp                 /sbin/nologin
13   nobody              /sbin/nologin
14   systemd-network     /sbin/nologin
15   dbus                /sbin/nologin
16   polkitd             /sbin/nologin
17   sshd                /sbin/nologin
18   postfix             /sbin/nologin
19   chrony              /sbin/nologin
20   ntp                 /sbin/nologin
21   tcpdump             /sbin/nologin
22   nscd                /sbin/nologin
23   dockerroot          /sbin/nologin
bye
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值