awk ‘找谁{干嘛}’
awk '条件/第几行/第几列{删除/修改/}'
这里不加花括号是因为,他只到了找谁,没有执行命令
会自动实行print $0显示出来
类似于sed的默认输出
[root@zheng ~]# awk 'NR>=2 && NR<=5' awk
2
3
4
5
[root@zheng ~]# awk 'NR>=2 && NR<=5{print $0}' awk
2
3
4
5
取行
1、先用seq 生成10个序列
重定向到sed.txt文件中
[root@zheng ~]# seq 10 > awk.txt
[root@zheng ~]# nl awk.txt
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
2、awk命令输出2-3行的内容
awk ‘NR==(行号)’
NR == number of record
[root@zheng ~]# awk 'NR==2,NR==4' awk.txt
2
3
4
3、awk显示第二行到第五行
大于2的行,小于5的行
中间的用两个&& 连接
[root@zheng ~]# awk 'NR>=2 && NR<=5' awk
2
3
4
5
4、输出/etc/passwd 第三列大于500的行
让uid大于500的显示
由于他是冒号分隔的,awk只支持空格,所以用-F改一下默认分隔符,在搜索大于500的就好了
[root@zheng ~]# awk '$3>500' /etc/passwd
systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
[root@zheng ~]# 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
chrony:x:997:995::/var/lib/chrony:/sbin/nologin
mysql:x:1000:1000::/home/mysql:/sbin/nologin
取列
1、ll当前目录然后重定向到awk.txt文件中
[root@zheng ~]# ll > awk.txt
[root@zheng ~]# nl awk.txt
1 total 60
2 -rw-r--r--. 1 root root 366 Jul 10 21:56 123.csv
3 -rw-r--r--. 1 root root 367 Jul 10 10:39 20200709.csv
4 -rw-r--r--. 1 root root 0 Jul 3 09:46 --add-repo
5 -rw-------. 1 root root 1264 Jun 29 12:51 anaconda-ks.cfg
6 -rw-r--r--. 1 root root 131 Jul 14 07:36 container-id.txt
7 -rw-r--r--. 1 root root 613 Jul 11 06:31 default.conf
8 -rw-r--r--. 1 root root 427 Jul 14 07:55 docker.csv
9 drwxr-xr-x. 2 root root 78 Jul 20 01:57 dockerfile
10 -rw-r--r--. 1 root root 468 Jul 10 09:47 docker-zheng.csv
11 -rw-r--r--. 1 root root 25548 Apr 7 2017 mysql57-community-release-el7-10.noarch.rpm
12 -rw-r--r--. 1 root root 99 Jul 19 05:11 ONBUILD
13 -rw-r--r--. 1 root root 0 Aug 10 01:18 sed.txt
14 -rw-------. 1 root root 0 Dec 14 2016 zheng
2、awk命令打印第一列和最后一列
比取行的时候单引号中多了一个花括号
取列的时候需要加一个print输出,后面跟$(列数)
awk print中的逗号,相当于空格
$NF是最后一列
[root@zheng ~]# awk '{print $1,$NF}' awk.txt
total 60
-rw-r--r--. 123.csv
-rw-r--r--. 20200709.csv
-rw-r--r--. --add-repo
-rw-------. anaconda-ks.cfg
-rw-r--r--. container-id.txt
-rw-r--r--. default.conf
-rw-r--r--. docker.csv
drwxr-xr-x. dockerfile
-rw-r--r--. docker-zheng.csv
-rw-r--r--. mysql57-community-release-el7-10.noarch.rpm
-rw-r--r--. ONBUILD
-rw-r--r--. sed.txt
-rw-------. zheng
3、中间用别的符号隔开
print逗号是空格隔开
这次用别的符号隔开
在两个列之间添加双引号,在双引号里加入分隔符
双引号之间的内容会原封不动的显示出来
注意这里分隔符两边是有空格,如果没有的话两列的信息会变成一行,连在一起
[root@zheng ~]# awk '{print $4 " --- " $NF}' awk.txt
--- 60
root --- 123.csv
root --- 20200709.csv
root --- --add-repo
root --- anaconda-ks.cfg
root --- container-id.txt
root --- default.conf
root --- docker.csv
root --- dockerfile
root --- docker-zheng.csv
root --- mysql57-community-release-el7-10.noarch.rpm
root --- ONBUILD
root --- sed.txt
root --- zheng
分隔/etc/passwd/文件
1、把etc/passwd内容重定向到sed.txt文件中
[root@zheng ~]# cat /etc/passwd >awk.txt
因为/etc/passwd/文件是用冒号分隔的,不是空格
所以awk分辨不出来,默认分辨空格
所以把分隔符从空格改成冒号
[root@zheng ~]# cat awk.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
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
2、
-F指定分隔符
后面接双引号里面是冒号,这里就是把空格改成冒号
后面再输出第一列和最后一列
[root@zheng ~]# awk -F":" '{print $1,$NF}' awk.txt
root /bin/bash
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
lp /sbin/nologin
sync /bin/sync
shutdown /sbin/shutdown
halt /sbin/halt
mail /sbin/nologin
operator /sbin/nologin
games /sbin/nologin
ftp /sbin/nologin
nobody /sbin/nologin
systemd-bus-proxy /sbin/nologin
systemd-network /sbin/nologin
dbus /sbin/nologin
polkitd /sbin/nologin
tss /sbin/nologin
postfix /sbin/nologin
sshd /sbin/nologin
chrony /sbin/nologin
mysql /sbin/nologin
3、这样看着比较不方便,因为没有对齐
可以加一个column -t让他对齐
[root@zheng ~]# awk -F":" '{print $1,$NF}' awk.txt |column -t
root /bin/bash
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
lp /sbin/nologin
sync /bin/sync
shutdown /sbin/shutdown
halt /sbin/halt
mail /sbin/nologin
operator /sbin/nologin
games /sbin/nologin
ftp /sbin/nologin
nobody /sbin/nologin
systemd-bus-proxy /sbin/nologin
systemd-network /sbin/nologin
dbus /sbin/nologin
polkitd /sbin/nologin
tss /sbin/nologin
postfix /sbin/nologin
sshd /sbin/nologin
chrony /sbin/nologin
mysql /sbin/nologin
分隔多种符号
先导入一行这个
第四列是linux,my
第六列是"Zyf_0_6_2_1"-Welcome!
如果按上面的做的只能设定一个,所以这么多符号分不方便
接下来设定多种符号来分隔信息
[root@zheng ~]# echo 'I am studying linux,my WeChat "Zyf_0_6_2_1"-Welcome!' > awk.txt
先来看看不设定的情况
[root@zheng ~]# awk '{print $4,$6,$NF}' awk.txt
linux,my "Zyf_0_6_2_1"-Welcome! "Zyf_0_6_2_1"-Welcome!
在之前分隔的基础上
-F 双引号里面加上中括号 [ ],在中括号里面加上要设定分隔的符号
设定 横杆和空格和逗号
[root@zheng ~]# awk -F "[- ,]" '{print $4,$6,$NF}' awk.txt
linux WeChat Welcome!
待定
[root@zheng ~]# awk -vRS="," '{print NR,$0}' awk
1 1
2
3
4
5
6
7
8
9
10
[root@zheng ~]# awk -vRS="," '{print NR,$0}' test.txt
1 金 211324198415244720
万 500224197105168312
万 646461asd
任 123123123zyf
任 linux6543454345354
任 j516515615635433
任 50182197306dagasdd
吕 21128219920911303X
空 150000019321112611
控 255133215131525131
向 19264611813621162X
杜 11010151351332153x
显示文件的行号,每行几列和最后一列内容
[root@zheng ~]# awk '{print NR,NF,$NF}' test.txt
1 2 211324198415244720
2 2 500224197105168312
3 2 646461asd
4 2 123123123zyf
5 2 linux6543454345354
6 2 j516515615635433
7 2 50182197306dagasdd
8 2 21128219920911303X
9 2 150000019321112611
10 2 255133215131525131
11 2 19264611813621162X
12 2 11010151351332153x
13 0
[root@zheng ~]# awk '{print NR,NF,$1}' test.txt
1 2 金
2 2 万
3 2 万
4 2 任
5 2 任
6 2 任
7 2 任
8 2 吕
9 2 空
10 2 控
11 2 向
12 2 杜
13 0
[root@zheng ~]# awk '{print NR,NF,$NF}' docker-zheng.csv
1 1 容器ID,容器IP,用户名,密码,cpu,内存,硬盘,谁
2 1 9fcbb7d99434,172.17.0.7root,123,2cpu,4G,40G,zheng,
3 1 0442290e7a37,172.17.0.6root,123,2cpu,4G,40G,zheng,
4 1 094cfa5b3281,172.17.0.5root,123,2cpu,4G,40G,zheng,
5 1 e6c84d9d8cc2,172.17.0.4root,123,2cpu,4G,40G,zheng,
6 1 ce569a33b4d6,172.17.0.2root,123,2cpu,4G,40G,zheng,
7 1 fb354eae612b,172.17.0.3root,123,2cpu,4G,40G,zheng,
8 1 ddef8923d614,e2339b419fd9root,123,2cpu,4G,40G,zheng,
9 1 2fcb2b9cb610root,123,2cpu,4G,40G,zheng,
[root@zheng ~]# awk '{print NR,NF,$NF}' /etc/passwd
1 1 root:x:0:0:root:/root:/bin/bash
2 1 bin:x:1:1:bin:/bin:/sbin/nologin
3 1 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 1 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 1 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 1 sync:x:5:0:sync:/sbin:/bin/sync
7 1 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 1 halt:x:7:0:halt:/sbin:/sbin/halt
9 1 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10 1 operator:x:11:0:operator:/root:/sbin/nologin
[root@zheng ~]# awk '{print NR,NF,$1}' awk.txt
1 6 I
[root@zheng ~]# awk '{print NR,NF,$2}' awk.txt
1 6 am
[root@zheng ~]# awk '{print NR,NF,$NF}' awk.txt
1 6 "Zyf_0_6_2_1"-Welcome!
小结