我有一个输入
Client=abc
Operation=123
Client=bcd
Operation=234
Operation=345
Operations=567
Client=def
Operation=789
Operation=892
Client=efg
Operation=991
我期待输出为
Client=abc
Operation=123
Client=bcd
Operation=234
Client=def
Operation=789
Client=efg
Operation=991
如果连续行中存在字符串匹配,则应删除除第一行之外的所有匹配行。 我试过awk'$ 1!= p {print; p = $ 1}'fileName,但没有任何帮助。
答案 0 :(得分:1)
您可以使用awk:
awk -F= '$1=="Client"{op=0} !op{print} $1=="Operation"{op=1}' file
Client=abc
Operation=123
Client=bcd
Operation=234
Client=def
Operation=789
Client=efg
Operation=991
<强>解释强>
-F=
将输入字段分隔符设置为=
op
0
设置为Client
op
为0
,则打印记录,从而打印Client=
行和Operation=
行Operation=
行时,我们设置op
= 1
答案 1 :(得分:-1)
你看起来很好看也许你只需要将分隔符设置为&#34; =&#34;。
awk -F"="
编辑:测试了OP的脚本,但添加了-F&#34; =&#34;
awk -F"=" '$1!=p{print;p=$1}' fileName
得到了输出:
Client=abc
Operation=123
Client=bcd
Operation=234
Operations=567
Client=def
Operation=789
Client=efg
Operation=991
注意当人们认为第三次行动应该消失时,第三次行动是怎样的。 OP的输入有操作和操作......注意&#39;&#39;到底。因为那个&#39;该脚本将Operation与Operations分开......我认为这是正确的逻辑。也许&#39; s&#39;由OP错误地添加。你删除那个&#39; s&#39;然后你得到输出:
Client=abc
Operation=123
Client=bcd
Operation=234
Client=def
Operation=789
Client=efg
Operation=991