三剑客awk命令

在这里插入图片描述

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     
1211324198415244720500224197105168312646461asd
任 123123123zyf
任 linux6543454345354
任 j516515615635433
任 50182197306dagasdd
吕 21128219920911303X
空 15000001932111261125513321513152513119264611813621162X
杜 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 22 23 24 25 26 27 28 29 210 211 212 213 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!

小结

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值