awk

coding

 awk工具

  • 截取文档中的某个段
[root@localhost ~]# mkdir awk

[root@localhost ~]# cp /etc/passwd awk/test.txt

[root@localhost ~]# cd awk

[root@localhost awk]# ls

test.txt

[root@localhost awk]# awk -F ':' '{print $1}' test.txt

root

bin

daemon

adm

lp

sync

shutdown

halt

mail

operator

games

ftp

nobody

systemd-bus-proxy

systemd-network

dbus

polkitd

tss

postfix

sshd

user1

user2

test

-F 指定分隔符 。 print为打印的动作,用来打印某个字段。$1为第1个字段。 $0比较特殊,表示整行。

[root@localhost awk]# head -n2 test.txt |awk -F ':' '{print $0}' 

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

bin:x:1:1:bin:/bin:/sbin/nologin

  • 匹配字符或者字符串(实现grep的功能,但没有颜色显示,肯定没有grep用起来方便)
[root@localhost awk]# awk '/oo/' test.txt

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

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin

postfix:x:89:89::/var/spool/postfix:/sbin/nologin

[root@localhost awk]# awk -F ":"  '$1 ~/oo/' test.txt

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

[root@localhost awk]# awk -F ":" '/root/ {print $1,$3} /test/ {print $1,$3}' test.txt

root 0

operator 11

test 1005

匹配完root, 再匹配test,它还可以只打印所匹配的段。

  • 条件操作符
[root@localhost awk]# awk -F ":"  '$3=="0"' /etc/passwd

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

#加双引号“” 会认为是字符

# 不加双引号是数字

[root@localhost awk]# awk -F ":" '$3>=500' /etc/passwd

systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin

polkitd:x:998:996:User for polkitd:/:/sbin/nologin

user1:x:1004:1001::/home/u/u1:/bin/bash

user2:x:1001:1001::/home/user2:/bin/bash

test:x:1005:1005::/home/test:/bin/bash

  • awk内置变量

NF表示用分隔符分隔后一共有多少段,NR表示行号。

OFS的用法:

[root@localhost awk]# head -5 /etc/passwd | awk -F ':' '{OFS="#"}{print $1,$3,$4}'

root#0#0

bin#1#1

daemon#2#2

adm#3#4

lp#4#7

NF用法:$NF 是最后一段的值。

[root@localhost awk]# head -n3 /etc/passwd | awk -F ':' '{print NR}'

1

2

3

NR 作为判断条件。也可以配合段匹配一起使用。

[root@localhost awk]# awk -F ":"  'NR<20 && $1 ~/roo/' /etc/passwd

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

  • awk数学运算—更改段值。
[root@localhost awk]# head -n 3 /etc/passwd |awk -F ':' '$1="root"'

root x 0 0 root /root /bin/bash

root x 1 1 bin /bin /sbin/nologin

root x 2 2 daemon /sbin /sbin/nologin

[root@localhost awk]# awk -F ":" '{(tot=tot+$3)}; END {print tot}' /etc/passwd

5674

以上是 awk 的全部内容, 来源链接: utcz.com/z/508719.html

回到顶部