三剑客老大"awk"名不虚传——你所不知道的awk
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三剑客老大"awk"名不虚传——你所不知道的awk相关的知识,希望对你有一定的参考价值。
三剑客老大"awk"名不虚传
——你所不知道的awk
我们都知道awk做统计非常方便,但是你知道awk也可以用于替换么?我们可以用awk实现sed的功能,甚至比sed更精确(因为可以精确到列)。
例如:将配置文件的第5行和第7行注释:
[[email protected] ~]# awk ‘NR>4&&NR<8{gsub(/^/,"#")}{print NR,$0}‘ passwd.txt
1 root:x:0:0:root:/root:/bin/bash
2
3 bin:x:1:1:bin:/bin:/sbin/nologin
4
5 # daemon:x:2:2:daemon:/sbin:/sbin/nologin
6 #
7 # adm:x:3:4:adm:/var/adm:/sbin/nologin
8
9 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
10
11 sync:x:5:0:sync:/sbin:/bin/sync
12
13 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
14
15 halt:x:7:0:halt:/sbin:/sbin/halt
16
17 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
18 uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
例如:删除每行开头的所有空格
[[email protected] ~]# awk ‘{gsub(/^[ ]+/,"")}{print}‘ passwd.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
把所有小写字母用括号()括起来
[[email protected] ~]# awk ‘{gsub(/[a-z]/,"(&)")}{print}‘ passwd.txt
(r)(o)(o)(t):(x):0:0:(r)(o)(o)(t):/(r)(o)(o)(t):/(b)(i)(n)/(b)(a)(s)(h)
(b)(i)(n):(x):1:1:(b)(i)(n):/(b)(i)(n):/(s)(b)(i)(n)/(n)(o)(l)(o)(g)(i)(n)
(d)(a)(e)(m)(o)(n):(x):2:2:(d)(a)(e)(m)(o)(n):/(s)(b)(i)(n):/(s)(b)(i)(n)/(n)(o)(l)(o)(g)(i)(n)
(a)(d)(m):(x):3:4:(a)(d)(m):/(v)(a)(r)/(a)(d)(m):/(s)(b)(i)(n)/(n)(o)(l)(o)(g)(i)(n)
(l)(p):(x):4:7:(l)(p):/(v)(a)(r)/(s)(p)(o)(o)(l)/(l)(p)(d):/(s)(b)(i)(n)/(n)(o)(l)(o)(g)(i)(n)
(s)(y)(n)(c):(x):5:0:(s)(y)(n)(c):/(s)(b)(i)(n):/(b)(i)(n)/(s)(y)(n)(c)
(s)(h)(u)(t)(d)(o)(w)(n):(x):6:0:(s)(h)(u)(t)(d)(o)(w)(n):/(s)(b)(i)(n):/(s)(b)(i)(n)/(s)(h)(u)(t)(d)(o)(w)(n)
(h)(a)(l)(t):(x):7:0:(h)(a)(l)(t):/(s)(b)(i)(n):/(s)(b)(i)(n)/(h)(a)(l)(t)
(m)(a)(i)(l):(x):8:12:(m)(a)(i)(l):/(v)(a)(r)/(s)(p)(o)(o)(l)/(m)(a)(i)(l):/(s)(b)(i)(n)/(n)(o)(l)(o)(g)(i)(n)
(u)(u)(c)(p):(x):10:14:(u)(u)(c)(p):/(v)(a)(r)/(s)(p)(o)(o)(l)/(u)(u)(c)(p):/(s)(b)(i)(n)/(n)(o)(l)(o)(g)(i)(n)
再例如:将第一列用户名部分的所有小写字母用()括起来
[[email protected] ~]# awk -F: -vOFS=":" ‘{gsub(/[a-z]+/,"(&)",$1)}{print}‘ passwd.txt
(root):x:0:0:root:/root:/bin/bash
(bin):x:1:1:bin:/bin:/sbin/nologin
(daemon):x:2:2:daemon:/sbin:/sbin/nologin
(adm):x:3:4:adm:/var/adm:/sbin/nologin
(lp):x:4:7:lp:/var/spool/lpd:/sbin/nologin
(sync):x:5:0:sync:/sbin:/bin/sync
(shutdown):x:6:0:shutdown:/sbin:/sbin/shutdown
(halt):x:7:0:halt:/sbin:/sbin/halt
(mail):x:8:12:mail:/var/spool/mail:/sbin/nologin
(uucp):x:10:14:uucp:/var/spool/uucp:/sbin/nologin
补充一个参数:以上操作都只是在内存中(模式空间)的操作,如果需要写入磁盘,需要安装最新版
[[email protected] ~]# awk --version|head -1
GNU Awk 4.1.4, API: 1.1
然后参数是:-i inplace
最新版awk下载地址:
http://ftp.gnu.org/gnu/gawk/
以上是关于三剑客老大"awk"名不虚传——你所不知道的awk的主要内容,如果未能解决你的问题,请参考以下文章