awk
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.txtroot: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.txtroot:x:0:0:root:/root:/bin/bash
[root@localhost awk]# awk -F ":" '/root/ {print $1,$3} /test/ {print $1,$3}' test.txtroot 0
operator 11
test 1005
匹配完root, 再匹配test,它还可以只打印所匹配的段。
- 条件操作符
[root@localhost awk]# awk -F ":" '$3=="0"' /etc/passwdroot: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/passwdroot: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/passwd5674
以上是 awk 的全部内容, 来源链接: utcz.com/z/508719.html