awk 在输出中打印不必要的新行

分享于2022年07月17日 awk console elasticsearch linux shell 问答
【问题标题】:awk 在输出中打印不必要的新行(awk prints unnecessary new line in output)
【发布时间】:2022-01-19 13:11:35
【问题描述】:

我正在尝试从以下数据(Elasticsearch 数据)创建 csv 文件

health status index                                                uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   78_data_store-2021.12.12                              cYZDB7NGQbyowP-WyF99Zw   1   1    5438232            0      8.3gb          4.1gb
green  open   78_data_store-2021.12.24                             RWrhN4QKT2OlbP4MB7CYmw   1   1     663431            0    745.3mb        372.6mb
green  open   78_data_store-2021.11.26                              CivwBCtAROCejmpZ6RaXOA   1   1     989983            0    956.5mb        478.2mb

我想要低于输出( 预期输出

78,78_data_store-2021.11.26,2021.11.26,1,1,478.2mb
78,78_data_store-2021.12.12,2021.12.12,1,1,4.1gb 
78,78_data_store-2021.12.24,2021.12.24,1,1,372.6mb

但是当我使用下面的命令时,我在输出中得到了不必要的新行

cat filename | grep " 78_" | sort -k 3 | awk '{split($3,a,"_");print a[1];split($3,a,"-"); print ","  $3 "," a[2] "," $5 "," $6 "," $10}'

此命令的输出

78
,78_data_store-2021.11.26,2021.11.26,1,1,478.2mb
78
,78_data_store-2021.12.12,2021.12.12,1,1,4.1gb
78
,78_data_store-2021.12.24,2021.12.24,1,1,372.6mb

命令中缺少什么?


【解决方案1】:

print 默认添加换行符。您可以改用 printf("%s", a[1]); 或将 a[1] 的打印移动到打印所有其他字段的位置。我已将 a 的第一次使用重命名为 b ,而是能够将值保留到以后:

grep " 78_" filename | sort -k 3 | \
awk '{split($3,b,"_");split($3,a,"-"); print b[1] ","  $3 "," a[2] "," $5 "," $6 "," $10}'

输出:

78,78_data_store-2021.11.26,2021.11.26,1,1,478.2mb
78,78_data_store-2021.12.12,2021.12.12,1,1,4.1gb
78,78_data_store-2021.12.24,2021.12.24,1,1,372.6mb