Splitting one line into multiple lines in numbering format using awk

I am trying to split a value using awk command into three parts. Need help to hack 3.

Content = 1. 11683 (<server01>: du.size[/,free] : 0.5 % 2. 21683 (<server02>: du.size[/,free] : 1.5 % 3. 31683 (<server03>: du.size[/,free] : 3.5 %

I want the above content to be broken into 3 lines in the numbering system.

Required output required:

1. 11683 (<server01>: du.size[/,free] : 0.5 % 
2. 21683 (<server02>: du.size[/,free] : 1.5 % 
3. 31683 (<server03>: du.size[/,free] : 3.5 %

      

I've tried the following commands:

echo $content | awk -F"3. " '{ print $2 }' 

      

and i get

31683 (<server03>: du.size[/,free] : 3.5 %

      

Likewise for others, but still failed to get the output sample in the correct numbering format as shown above.

Can anyone help me with this?

+3


source to share


5 answers


Instead, sed

you can use

sed "s#[^^]\([0-9]\.\) #\n\1 #g"

      



Example:

[~/Desktop]
==> echo "1. 11683 (<server01>: du.size[/,free] : 0.5 % 2. 21683 (<server02>: du.size[/,free] : 1.5 % 3. 31683 (<server03>: du.size[/,free] : 3.5 %" | sed "s#[^^]\([0-9]
\.\) #\n\1 #g"
1. 11683 (<server01>: du.size[/,free] : 0.5 %
2. 21683 (<server02>: du.size[/,free] : 1.5 %
3. 31683 (<server03>: du.size[/,free] : 3.5 %

      

+4


source


The symbol %

looks like a good candidate for splitting. Try:

sed 's/% /%\n/g'

      

Testing:



echo "1. 11683 (<server01>: du.size[/,free] : 0.5 % 2. 21683 (<server02>: du.size[/,free] : 1.5 % 3. 31683 (<server03>: du.size[/,free] : 3.5 %" | sed 's/% /%\n/g'

      

Results:

1. 11683 (<server01>: du.size[/,free] : 0.5 %
2. 21683 (<server02>: du.size[/,free] : 1.5 %
3. 31683 (<server03>: du.size[/,free] : 3.5 %

      

+5


source


perl -pe 's/(\d+\.\s)/\n$1/g'

      

tested:

> echo "1. 11683 (<server01>: du.size[/,free] : 0.5 % 2. 21683 (<server02>: du.size[/,free] : 1.5 % 3. 31683 (<server03>: du.size[/,free] : 3.5 %" | perl -pe 's/(\d+\.\s)/\n$1/g'

1. 11683 (<server01>: du.size[/,free] : 0.5 % 
2. 21683 (<server02>: du.size[/,free] : 1.5 % 
3. 31683 (<server03>: du.size[/,free] : 3.5 %

      

+3


source


try

echo "1. 11683 (<server01>: du.size[/,free] : 0.5 % 2. 21683 (<server02>: du.size[/,free] : 1.5 % 3. 31683 (<server03>: du.size[/,free] : 3.5 %" | awk '{n = split($0,array,"%"); for (i = 0; i < n-1; ++i){gsub("^ ","",array[i+1]);print array[i+1]" %",i}}'

      

+1


source


Your data appears to be fixed in number of items.

{
    print $1, $2, $3, $4, $5, $6, $7
    print $8, $9, $10, $11, $12, $13, $14
    print $15, $16, $17, $18, $19, $20, $21
}

      

Useful if you need to do something with the data other than printing. In the meantime, there is no need to know about it. ”

+1


source







All Articles