当我运行以下命令时,它将输出列列表,如下所示:
# rancher clusters
CURRENT ID STATE NAME PROVIDER
* abcd active test-cluster Imported
efgh active prod-cluster Imported
xyzd active dev-cluster Imported
当我尝试打印NAME列时,结果中未返回test-cluster
# rancher clusters | awk '{print $3}'
STATE
active
prod-cluster
dev-cluster
您可以看到STATE列的部分显示在打印的NAME列中。
当我打印第四列时,test-cluster和NAME一起返回
# rancher clusters | awk '{print $4}'
NAME
test-cluster
Imported
Imported
为什么不从打印的确切列中awk返回值?是什么导致一列中的值返回到另一列中?我的期望是,当我打印$ 3时,所有结果都将显示在第四列(NAME)中。
awk根据分隔符分割字符串(默认为一个或几个空格,即制表符或空格)。更清楚地说,这是您的数据,其中的数据由|
CURRENT|ID|STATE|NAME|PROVIDER
*|abcd|active|test-cluster|Imported
efgh|active|prod-cluster|Imported
xyzd|active|dev-cluster|Imported
如您在上方看到的,在第一行上的$1
是CURRENT
,$2
is ID
,依此类推。在第二行,$1
is *
,$2
is abcd
,等等。但是,在第三行,$1
is efgh
,其对应于ID列。由于CURRENT列中除空格外没有其他内容,因此awk会将其忽略,因此$3
显示第3行和第4行的NAME。
您需要做的是先删除第一列,然后再将其发送到awk。以下命令应为您执行此操作。
rancher clusters | cut -b 8- | awk '{ print $3 }'
cut
上面管道中的命令将删除每行中的前7个字节,并将其余部分打印到STDOUT。这将导致awk
不会因每行上的列数不同而感到困惑。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句