awk

Author Avatar
Aryb1n 5月 30, 2017

只能每天记一点辣

开始

刚开始就只记录一些简单的用法好了
基本使用姿势

awk 'BEGIN{ commands } pattern{ commands } END{ commands }'

看有三部分 BEGIN, pattern, END, 每部分都可有可无

最简单的只有pattern

haibin:~$ last -n 5

haibin   tty7         :0               Tue May 30 14:18    gone - no logout
reboot   system boot  4.4.0-59-generic Tue May 30 14:16   still running
haibin   tty7         :0               Mon May 29 10:02 - down   (12:32)
reboot   system boot  4.4.0-59-generic Mon May 29 10:00 - 22:34  (12:34)
haibin   tty7         :0               Sun May 28 13:33 - crash  (20:26)

使用awk

haibin:~$ last -n 5 | awk '{print $1}'

haibin
reboot
haibin
reboot
haibin

看出来了吧,,, $1是第一个域,$2…,$0是所有的,所以

haibin:~$ last -n 5 | awk '{print $0}'
haibin:~$ last -n 5 | awk '{print }'
haibin:~$ last -n 5

是一样的

-F 可以指定分隔符(默认是空格)
比如在cat /etc/passwd的时候就要用-F :

每部分

BEGIN 可以做表头
END 可以做最后信息的输出
pattern 可以是正则,只匹配对应的行

patern (r开头的)

cat /etc/passwd | awk -F : '/^r/{print "user: " $1 "\t shell: " $7}'


user: root     shell: /bin/bash
user: rtkit     shell: /bin/false
user: redis     shell: /bin/false

加个BEGIN

cat /etc/passwd | awk -F : 'BEGIN{print "user\tshell"} /^r/{print  $1 "\t" $7}'


user    shell
root    /bin/bash
rtkit    /bin/false
redis    /bin/false

加个END (统计个数)

cat /etc/passwd | awk -F : 'BEGIN{i=0;print "user\tshell"} /^r/{i++;print  $1 "\t" $7} END{print "total\t", i, "users"}'

user    shell
root    /bin/bash
rtkit    /bin/false
redis    /bin/false
total     3 users

不过我这边用正则怎么有点问题

从入门到入门

今天没有时间入门了,来日方长