如果不止一行具有相同的字符串,则使用 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

解释:

  1. -F= 将输入字段分隔符设置为 =
  2. 当我们得到包含 Client
  3. 的行时,将变量 op 设置为 0
  4. 如果 op0 则打印记录从而打印 Client= 和前 Operation=
  5. 当我们得到第一个 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