2017-05-27 108 views
0

我有一个输出像下面我希望将其转换为单列(无空间)使用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 

请帮忙。

回答

2

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 
0
$ 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