可锐资源网

技术资源分享平台,提供编程学习、网站建设、脚本开发教程

Linux 对awk命令的补充(linux中的awk命令详解)

之前写的文章如下:Linux 简单使用awk命令

awk "{ print $3 }"与awk '{ print $3 }'的区别

  • awk "{ print $3 }" 不会输出输入数据的第3列,因为双引号的变量$3会事先被shell解析。
  • awk '{ print $3 }' 会输出输入数据的第3列,因为单引号里的变量$3不会被shell解析。

awk "{ print $3 }"的效果

decisionmaker@tdar-srv:~$ sudo docker images | grep "^<none>" | awk "{ print $3 }" | head -n 10
<none>                          <none>       cacd883da894   3 days ago      761MB
<none>                          <none>       c79ed053e535   3 days ago      761MB
<none>                          <none>       21a60c91ac3a   3 days ago      584MB
<none>                          <none>       249134be5b6f   3 days ago      470MB
<none>                          <none>       2deea4c664c6   3 days ago      450MB
<none>                          <none>       cf0ae83a80eb   5 weeks ago     2.3GB
<none>                          <none>       a754860b7ce8   6 weeks ago     2.15GB
<none>                          <none>       a29947cdabf9   2 months ago    1.03GB
<none>                          <none>       38c97337ca10   2 months ago    1.03GB
<none>                          <none>       7bfb2f106f75   2 months ago    1.03GB

awk '{ print $3 }'的效果

decisionmaker@tdar-srv:~$ sudo docker images | grep "^<none>" | awk '{ print $3 }' | head -n 10
cacd883da894
c79ed053e535
21a60c91ac3a
249134be5b6f
2deea4c664c6
cf0ae83a80eb
a754860b7ce8
a29947cdabf9
38c97337ca10
7bfb2f106f75

当输入数据的列值含有空格时,awk输出的数据可能不符合预期

ecisionmaker@tdar-srv:~$ sudo docker images | head -n 10
REPOSITORY                      TAG          IMAGE ID       CREATED         SIZE
docker_flask_web                latest       a639e083bef9   3 days ago      761MB
<none>                          <none>       cacd883da894   3 days ago      761MB
docker_django_web               latest       c08331dfd077   3 days ago      761MB
<none>                          <none>       c79ed053e535   3 days ago      761MB
<none>                          <none>       21a60c91ac3a   3 days ago      584MB
docker_php_php81                latest       191dcc3d38e0   3 days ago      883MB
<none>                          <none>       249134be5b6f   3 days ago      470MB
<none>                          <none>       2deea4c664c6   3 days ago      450MB
php                             8.1-fpm      8c08d993542f   13 days ago     449MB

# awk '{print $5}' 不会输出SIZE那一列,因为SIZE前面那一列的列值(CREATE那一列)含有空格,而空格是awk默认的列与列之间的分隔符
decisionmaker@tdar-srv:~$ sudo docker images | grep "^<none>" | awk '{print $5}' | head -n 10
days
days
days
days
days
weeks
weeks
months
months
months

只能采取折中方案,输出不含空格的列值:

# 输出不含空格的第1列,第3列,最后一列
decisionmaker@tdar-srv:~$ sudo docker images | grep "^<none>" | awk '{ print $1,$3,$NF }' | head -n 10
<none> cacd883da894 761MB
<none> c79ed053e535 761MB
<none> 21a60c91ac3a 584MB
<none> 249134be5b6f 470MB
<none> 2deea4c664c6 450MB
<none> cf0ae83a80eb 2.3GB
<none> a754860b7ce8 2.15GB
<none> a29947cdabf9 1.03GB
<none> 38c97337ca10 1.03GB
<none> 7bfb2f106f75 1.03GB
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言