0

I have a output like below which I wish to convert it to single row (without space)

 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

I used command below

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

but it returns me output like

 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

Where as I wish to have output like

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

Please help.

2 Answers 2

2

awk to the rescue!

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  
Sign up to request clarification or add additional context in comments.

Comments

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.