簡體   English   中英

使用awk將多行輸出轉換為具有單獨列的單行

[英]Converting output in multiple rows to single row with separate column using awk

我有一個類似下面的輸出,我希望將其轉換為單行(無空格)

 vol sysvol : 25654
 vol sysvol : 39%
 vol sysvol : 820928KB
 vol vol01 : 502
 vol vol01 : 0%
 vol vol01 : 16064KB
 vol vol02 : 65491
 vol vol02 : 99%
 vol vol02 : 2095712KB
 DB : 91647
 DB : 46%
 DB : 2932704KB

我在下面使用了命令

awk 'NR%3{printf "%s,",$0;next;}1'

但是它返回我的輸出像

 vol sysvol : 25654 , vol sysvol : 39% , vol sysvol : 820928KB
 vol vol01 : 502 , vol vol01 : 0% , vol vol01 : 16064KB
 vol vol02 : 65491 , vol vol02 : 99% , vol vol02 : 2095712KB
 DB : 91647 , DB : 46% , DB : 2932704KB

我希望在哪里輸出

vol sysvol: 25654 , 39%  , 820928KB
vol vol01 : 502 , 0% , 16064KB
vol vol02 : 65491 ,  99% ,  2095712KB
DB : 91647 , 46% ,  2932704KB

請幫忙。

awk解救!

awk -F: -v OFS=, '{if (NR%3==1) printf "%s : %s",$1,$2 OFS;
                   else printf "%s", $2 (NR%3?OFS:ORS)}' file  

vol sysvol  :  25654, 39%, 820928KB                     
vol vol01  :  502, 0%, 16064KB                                     
vol vol02  :  65491, 99%, 2095712KB                             
DB  :  91647, 46%, 2932704KB  
$ cat tst.awk
BEGIN { FS=":"; OFS="," }
$1 != prev { if (NR>1) print rec; rec=$0; prev=$1; next }
{ rec = rec OFS $2 }
END { print rec }

$ awk -f tst.awk file
 vol sysvol : 25654 , 39% , 820928KB
 vol vol01 : 502 , 0% , 16064KB
 vol vol02 : 65491 , 99% , 2095712KB
 DB : 91647 , 46% , 2932704KB

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM