Bash - 根据特定行上的文本匹配删除奇数/偶数行

时间:2018-02-21 11:14:13

标签: bash awk sed grep

我有一个包含字段和值对的文本输入,例如:

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,但找不到任何能解决这个问题的东西。提前谢谢。

2 个答案:

答案 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删除第一行并重复,否则打印两行并重复。