【问题标题】:Separate by blank lines in bash在 bash 中用空行分隔
【发布时间】:2011-10-25 16:08:55
【问题描述】:

我有这样的输入:

Block 1:
line1
line2
line3
line4

Block 2:
line1
line2

Block 3:
line1
line2
line3

这是一个例子,是否有一种优雅的方式来打印 Block 2 及其行而不依赖于它们的名称?这就像“用空行分隔块并打印第二个块”。

【问题讨论】:

    标签: shell lines


    【解决方案1】:

    将记录分隔符设置为空字符串以在空行上分隔。至 打印第二个块:

    $ awk -v RS= 'NR==2{ 打印 }'

    (请注意,这仅在不包含任何空格的行上分隔。 仅包含空格的行不被视为空行。)

    【讨论】:

    • +1,我不知道 RS。不妨在打印块中添加exit
    • Perl 等效项:perl -00 -ne 'if ($.==2) {print; exit}'
    • 我以前尝试过这种方法但没有用,现在我看到每个“空白”行上都有 1 个空格!
    • @Bill the Lizard:你刚刚对这个答案投了反对票吗?请问是什么原因?
    【解决方案2】:

    试试这个:

     awk '!$0{i++;next;}i==1' yourFile
    

    考虑性能,也可以在处理完第二个块后添加退出:

     awk '!$0{i++;next;}i==1;i>1{exit;}' yourFile
    

    测试

    kent$  cat t
    Block 1:
    line1
    line2
    line3
    line4
    
    Block 2:
    line1
    line2
    
    Block 3:
    line1
    line2
    line3
    
    kent$  awk '!$0{i++;next;}i==1' t           
    Block 2:
    line1
    line2
    
    kent$  awk '!$0{i++;next;}i==1;i>1{exit;}' t
    Block 2:
    line1
    line2
    

    【讨论】:

      猜你喜欢
      • 2012-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-23
      • 2021-01-22
      • 2016-11-03
      • 2013-03-11
      • 2011-02-07
      相关资源
      最近更新 更多