ThePatBan
ThePatBan

Reputation: 107

Using awk to convert rows into columns

My data is formatted as such:

Row1
<p>{
<p>abc1:a123
<p>abc2:1234
<p>abc3:12345
<p>abc4:abcd
<p>}
<p>Row2
<p>{
<p>abc1:a123
<p>abc2:1234
<p>abc3:12345
<p>abc4:abcd
<p>}

I want the output to be as:

<p>abc1||abc2||abc3||abc4
<p>a123||1234||12345||abcd

I have tried

awk 'NR==1 { print $1, $3, $5, $7 } { print $2, $4, $6, $8 } { print $3, $5, $7, $9 } ' RS='\n\n' >FS=': +|\n' OFS='\t'

but the command does not convert the entire file as my output is

<p>Row1 abc1 abc2 abc3 abc4
<p>{ a123 1234 12345 abcd

Upvotes: 1

Views: 843

Answers (1)

konsolebox
konsolebox

Reputation: 75458

awk -F '[<>]' '{ print $3 }' file | \
awk -v RS='{' -F '[:\n]' -v OFS='||' \
    'NR > 1 { print "<p>" $2, $4, $6, $8 "</p>\n<p>" $3, $5, $7, $9 "</p>" }'

Output:

<p>abc1||abc2||abc3||abc4</p>
<p>a123||1234||12345||abcd</p>
<p>abc1||abc2||abc3||abc4</p>
<p>a123||1234||12345||abcd</p>

Upvotes: 1

Related Questions