【问题标题】:Using awk to convert rows into columns使用 awk 将行转换为列
【发布时间】:2014-10-05 10:04:44
【问题描述】:

我的数据格式如下:

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

【问题讨论】:

    标签: unix text awk sed gawk


    【解决方案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>
    

    【讨论】:

    • 我为段落放置了

      。抱歉弄错了
    • @pathikrit 你能进一步解释一下吗?整体上你的实际预期输出是什么?
    • 我想将输出加载到 oracle 数据库中进行分析。本质上我只能提取第一行并且我的代码没有进一步进展:>awk 'NR >= 1 { print $1, $3, $5, $7, $9, $11, $13, $15, $17, $19 } { print $2 , $4, $6, $8, $10, $12, $14, $16, $18, $20 } 'RS='\n\n' FS=': +|\n' OFS='||'
    • @pathikrit 我的脚本中究竟应该更正什么?原来的输入真的不一样吗?你能改变它吗?你还能显示预期的输出吗?
    • >awk 'NR >= 1 { 打印 $1, $3, $5} {打印 $2, $4, $6 } 'RS='{\n' >FS=': +|\n' OFS ='|'我让它工作我将 RS 标识符更改为 '{'
    猜你喜欢
    • 2015-12-29
    • 2019-02-22
    • 2015-06-21
    • 2018-07-24
    • 2023-03-25
    • 2015-04-25
    • 2012-01-07
    • 1970-01-01
    • 2022-08-04
    相关资源
    最近更新 更多