我有一个包含字段和值对的文本输入,例如:
a=1
b=2
a=6
a=5
b=7
我想要输出:
a=1
b=2
a=5
b=7
如果它不包含'a',则基本上删除奇数行,如果它不包含'b',则删除偶数行。
在这种情况下,删除输出的[a = 6],并保留完整的a = * \ n b = *对。
我觉得这可以用awk,但找不到任何能解决这个问题的东西。提前谢谢。
答案 0 :(得分:3)
编辑:请参阅上述OP的说明:当删除偶数行时,下一行变为偶数,而奇数行则相同。
第二次编辑:根据OP的进一步解释(他说:"抱歉。我没有解释好自己。让我再试一次。想象一下&#39 ;'是用户,' b'是地址。我想删除用户只输入他的姓名而不是地址的任何数据。我只想保留已完成的姓名/地址对&# 34;),解决方案是下一个命令:
awk -F= '$1=="a"{a=$0} (a!="")&&($1=="b"){print a; print; a=""}' input.txt
输出:
a=1
b=2
a=5
b=7
答案 1 :(得分:0)
这可能适合你(GNU sed):
sed '$!N;/a.*\n.*b/!D' file
在模式空间中读取两行。如果模式空间不包含a
后跟b
删除第一行并重复,否则打印两行并重复。