如果找到匹配的关键字,则删除上面的行

如果找到匹配的关键字,则删除上面的行

我有一个类似这样的数据:

Amit:   
  Mem  30  40 50  
Sumit:  
  Mem  50 70 80   
Tarun:  
Nishant:  
  Mem  90 20 45    

如“Tarun:”中所示,Mem 不存在,需要将其删除。

最终输出应该是

Amit:   
  Mem  30  40 50   
Sumit:   
  Mem  50 70 80   
Nishant:   
  Mem  90 20 45     

请帮助我解决这个问题。我已尝试但无法获得所需的输出

答案1

$ sed '$!N;/\n  Mem/p;D' file
Amit:
  Mem  30  40 50
Sumit:
  Mem  50 70 80
Nishant:
  Mem  90 20 45
  • $!N:对于不是最后一行的每一行,将下一行附加到缓冲区,中间有一个分隔换行符。

  • /\n  Mem/p:如果缓冲区现在包含一个换行符,紧随其后的是字符串  Mem(两个空格和Mem),则打印缓冲区。您还可以使用[[:blank:]]*两个空格来代替,以在行的开头留出任意数量的空格或制表符Mem

  • D:删除缓冲区中第一个换行符之前的数据,并开始下一个循环。

答案2

这将是通用代码,只有 Mem 存在,它将打印上一行

awk '{a[++i]=$0}/Mem/{for(x=NR-1;x<=NR;x++)print a[x]}' file

输出

Amit:   
  Mem  30  40 50  
Sumit:  
  Mem  50 70 80   
Nishant:  
  Mem  90 20 45    

相关内容