如果不止一行具有相同的字符串,则使用 unix 删除除第一行之外的所有行
if more then one line have same string, remove all the lines except first using unix
我有一个输入
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,但没有任何帮助。
你可以使用 awk:
awk -F= '=="Client"{op=0} !op{print} =="Operation"{op=1}' file
Client=abc
Operation=123
Client=bcd
Operation=234
Client=def
Operation=789
Client=efg
Operation=991
解释:
-F=
将输入字段分隔符设置为 =
- 当我们得到包含
Client
的行时,将变量 op
设置为 0
- 如果
op
是 0
则打印记录从而打印 Client=
和前 Operation=
行
- 当我们得到第一个
Operation=
行时,我们设置 op
= 1
你看起来不错,也许你只需要将分隔符设置为“=”。
awk -F"="
编辑:测试了 OP 的脚本但添加了 -F"="
awk -F"=" '!=p{print;p=}' fileName
得到输出:
Client=abc
Operation=123
Client=bcd
Operation=234
Operations=567
Client=def
Operation=789
Client=efg
Operation=991
注意第三个行动是如何在人们认为它应该消失的时候出现的。 OP 的输入有 Operation 和 Operations...注意最后的 's' 。因此 's' 脚本将操作与操作分开......我认为这是正确的逻辑。也许 's' 是OP错误添加的。如果你删除 's' 然后你得到输出:
Client=abc
Operation=123
Client=bcd
Operation=234
Client=def
Operation=789
Client=efg
Operation=991
我有一个输入
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,但没有任何帮助。
你可以使用 awk:
awk -F= '=="Client"{op=0} !op{print} =="Operation"{op=1}' file
Client=abc
Operation=123
Client=bcd
Operation=234
Client=def
Operation=789
Client=efg
Operation=991
解释:
-F=
将输入字段分隔符设置为=
- 当我们得到包含
Client
的行时,将变量 - 如果
op
是0
则打印记录从而打印Client=
和前Operation=
行 - 当我们得到第一个
Operation=
行时,我们设置op
=1
op
设置为 0
你看起来不错,也许你只需要将分隔符设置为“=”。
awk -F"="
编辑:测试了 OP 的脚本但添加了 -F"="
awk -F"=" '!=p{print;p=}' fileName
得到输出:
Client=abc
Operation=123
Client=bcd
Operation=234
Operations=567
Client=def
Operation=789
Client=efg
Operation=991
注意第三个行动是如何在人们认为它应该消失的时候出现的。 OP 的输入有 Operation 和 Operations...注意最后的 's' 。因此 's' 脚本将操作与操作分开......我认为这是正确的逻辑。也许 's' 是OP错误添加的。如果你删除 's' 然后你得到输出:
Client=abc
Operation=123
Client=bcd
Operation=234
Client=def
Operation=789
Client=efg
Operation=991