awk命令集锦

AWK

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

1、假设last -n 5的输出如下:

[root@localhost ~]# last -n 5

root     pts/0        192.168.123.1    Wed Dec 28 01:55   still logged in   

reboot   system boot  2.6.32-573.el6.x Tue Dec 27 04:25 - 03:11  (22:46)    

root     pts/1        192.168.123.1    Tue Dec 27 02:00 - 02:00  (00:00)    

root     pts/1        192.168.123.1    Tue Dec 27 01:59 - 02:00  (00:00)    

root     pts/0        192.168.123.1    Tue Dec 27 01:59 - down   (00:16)

2、只显示五个最近登录的账号:

[root@localhost ~]# last -n 5 | awk '{print $1}'

root

reboot

root

root

root

awk工作流程是这样的:读入有'\n'换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域。默认域分隔符是"空白键" 或 "[tab]键",所以$1表示登录用户,$3表示登录用户ip,以此类推

3、显示/etc/passwd的账户:

[root@localhost ~]# cat /etc/passwd |awk  -F ':'  '{print $1}'

root

bin

daemon

adm

lp

这种是awk+action的示例,每行都会执行action{print $1}。

-F指定域分隔符为':'

4、显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以tab键分割

[root@localhost ~]# cat /etc/passwd |awk  -F ':'  '{print $1"\t"$7}'

root    /bin/bash

bin     /sbin/nologin

daemon  /sbin/nologin

adm     /sbin/nologin

lp      /sbin/nologin


5、如果只是显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以逗号分割,而且在所有行添加列名name,shell,在最后一行添加"blue,/bin/nosh"。

cat /etc/passwd |awk  -F ':'  'BEGIN {print "name,shell"}  {print $1","$7} END {print "blue,/bin/nosh"}'

cat /etc/passwd | awk -F ':' 'BEGIN {print "name \t shell"} {print$1"\t"$7} END {print "blue,/bin/bash"}'

name,shell

root,/bin/bash

daemon,/bin/sh

bin,/bin/sh

sys,/bin/sh

....

blue,/bin/nosh

awk工作流程是这样的:先执行BEGIN,然后读取文件,读入有/n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域,随后开始执行模式所对应的动作action。接着开始读入第二条记录••••••直到所有的记录都读完,最后执行END操作。

搜索/etc/passwd有root关键字的所有行

awk  -F:  '/root/'  /etc/passwd

root:x:0:0:root:/root:/bin/bash

这种是pattern的使用示例,匹配了pattern(这里是root)的行才会执行action(没有指定action,默认输出每行的内容)。

搜索支持正则,例如找root开头的: awk -F:  '/^root/'  /etc/passwd

搜索/etc/passwd有root关键字的所有行,并显示对应的shell

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

/bin/bash

 这里指定了action{print $7}

猜你喜欢

转载自blog.csdn.net/csdn_hzx/article/details/80685318