awk打印字段在错误的列中

霍华德·洛克

当我运行以下命令时,它将输出列列表,如下所示:

# 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

如您在上方看到的,在第一行上的$1CURRENT$2is ID,依此类推。在第二行,$1is *$2is abcd,等等。但是,在第三行,$1is efgh,其对应于ID列。由于CURRENT列中除空格外没有其他内容,因此awk会将其忽略,因此$3显示第3行和第4行的NAME。

您需要做的是先删除第一列,然后再将其发送到awk。以下命令应为您执行此操作。

rancher clusters | cut -b 8- | awk '{ print $3 }'

cut上面管道中命令将删除每行中的前7个字节,并将其余部分打印到STDOUT。这将导致awk不会因每行上的列数不同而感到困惑。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章