Awk 删除图案后的所有连续重复线

Awk 删除图案后的所有连续重复线,awk,sed,Awk,Sed,我有一个包含数据的文件 cell (HB) input input input Z output A input cell (BP) input input Z1 output A1 input 我希望输出为 cell (HB) Z output A input cell (BP) Z1 output A1 input 我想删除单元格行之后出现word输入的所有连续行 我试过密码 awk '{for (i=1;i<=NF;i++) if (!a[$i]++) print($i,FS)}

我有一个包含数据的文件

cell (HB)
input
input
input
Z
output
A
input
cell (BP)
input
input
Z1
output
A1
input
我希望输出为

cell (HB)
Z
output
A
input
cell (BP)
Z1
output
A1
input
我想删除
单元格
行之后出现word
输入
的所有连续行

我试过密码

awk '{for (i=1;i<=NF;i++) if (!a[$i]++) print($i,FS)}{print("\n")}' file

awk'{for(i=1;i仅针对您展示的样本,请尝试以下内容。使用GNU
awk编写并测试

awk '
!/input/{
  if(count==1){
    print prev
  }
  count=0
  prev=""
}
/input/{
  count++
  prev=$0
  next
}
1
END{
  if(count==1){
    print prev
  }
}
' Input_file

使用
gnu awk
您可以使用
RS
RT

awk-vrs='cell[^\n]*\n(输入\n)+''{sub(/\n.+/,“\n”,RT);ORS=RT}1'文件
细胞(血红蛋白)
Z
输出
A.
输入
单元格(BP)
Z1
输出
A1
输入
在这里:

  • -v RS='cell[^\n]*\n(input\n)+
    RS
    设置为
    cell
    ,后跟空格,后跟任何内容,直到换行,然后是多行,其中包含文本
    input
  • sub(…)
    :删除第一行换行后的所有内容
  • ORS=RT
    :将输出记录分隔符设置为与
    RT
  • 1
    :使用
    OR打印每条记录

    • 比预期的短,我想知道它是否有问题:

      $ awk '!(f&&/input/){print;f=0}/cell/{f=1}' file
      
      输出:

      cell (HB)
      Z
      output
      A
      input
      cell (BP)
      Z1
      output
      A1
      input
      
      这可能适用于您(GNU-sed):

      通过设置
      -E
      打开扩展regexp

      打开一个两行窗口

      如果该行包含
      单元格
      ,然后下一行包含
      输入
      ,请删除最后一行并重复

      否则,打印/删除第一行并重复


      此通用解决方案将删除所有重复的行

      sed -E 'N;/^(.*)\n\1$/{:a;s/\n.*//;$!{N;/^(.*)\n\1$/ba};D};P;D' file
      
      通过设置
      -E
      打开扩展regexp

      打开一个两行窗口

      如果窗口中的行重复,请删除最后一行并继续执行此操作,直到两行不同,然后删除第一行


      否则,请打印/删除第一行并重复。

      在单元格行之后显示word input
      您显示的示例仅显示单元格字符串,我们可以在其中设置/取消设置变量,是否还有其他内容出现在单元格字符串的位置?为什么我要问这个问题,我们可以从哪里开始查找连续性ve输入的出现情况以及忽略哪个块,请告知,谢谢。否。数据仅存在
      单元格
      ,我们需要删除所有重复输入的行cell@NEHACHOUDHARY,好的,那么你可以试一下我的答案,并在评论部分告诉我进展如何,等等,干杯并继续问好estions,继续在这个伟大的网站上分享好的知识,干杯。
      sed -E 'N;/^(.*)\n\1$/{:a;s/\n.*//;$!{N;/^(.*)\n\1$/ba};D};P;D' file