使用awk将行转换为列

时间:2014-08-12 10:58:20

标签: unix text awk sed gawk

我的数据格式如下:

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>}

我希望输出为:

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

我试过了

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'

但该命令不会转换整个文件,因为我的输出是

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

1 个答案:

答案 0 :(得分:1)

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>" }'

输出:

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