我有一个类似这样的数据:
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