【问题标题】:print N line after the pattern till blank line is reached在模式后打印 N 行直到到达空白行
【发布时间】:2013-09-30 07:28:06
【问题描述】:

我需要在模式命中后打印多行直到到达空白行。

aaa
bbb
ccc
ddd

aaa
fff
ggg
hhh
iii
jjj

在一行中包含组数据的所需输出:

aaa bbb ccc ddd 
aaa fff ggg hhh iii jjj

【问题讨论】:

  • 为什么有人在不说明原因的情况下否决了一个问题,嗯。所以我投了赞成票。

标签: unix sed awk


【解决方案1】:
awk '$1=$1' RS="\n\n" file
aaa bbb ccc ddd
aaa fff ggg hhh iii jjj

或者一些更健壮的(如果0 作为第一位数字。

awk '{$1=$1}1' RS="\n\n" file

PS,这可能只适用于 gawk,或支持 RS 中的多个字符的 awk

【讨论】:

    【解决方案2】:

    awk 的一种方式:

    $ awk '{$1=$1}1' RS= FS='\n' OFS=' ' file
    aa bbb ccc ddd
    aaa fff ggg hhh iii jjj
    

    【讨论】:

    • @user2809888 np,使用OFS的好处是您可以轻松更改数据的格式,例如CSV只需设置OFS=,
    【解决方案3】:

    使用sed

    $ sed -r ':a;N;$!ba;s/(.)\n/\1 /g' inputfile
    aaa bbb ccc ddd 
    aaa fff ggg hhh iii jjj
    

    【讨论】:

      【解决方案4】:

      这可能对你有用(GNU sed):

      sed ':a;$!N;s/\n$//;t;s/\n/ /;ta' file
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-31
        • 2014-06-25
        相关资源
        最近更新 更多