从文件中的行中删除重复的字符串

Removing duplicate strings from lines in a file

我正在尝试删除文件行中的重复字符串。我尝试使用 uniq,但这只适用于删除重复行,而不是行中的重复字符串。

我只关心 = 号后的 "words" 并且 "words" 是任意序列的非空格但不能包含 = 号。

我的文件如下所示:

LINE1=hello hello world
LINE2=hello world world
LINE3=hello hello hello

我希望它看起来像什么:

LINE1=hello world
LINE2=hello world
LINE3=hello

这是对您可能正在寻找的内容的一种可能解释:

$ awk -F'=' '{words=""; delete seen; split(,t,/ /); for (i=1;i in t;i++) if (!seen[t[i]]++) words = (words=="" ? "" : words " ") t[i]; print  FS words}' file
LINE1=hello world
LINE2=hello world
LINE3=hello

它基于很多假设,但主要是你只关心 = 符号后面的 "words" 并且 "words" 是任何非空格序列但不能包含= 个迹象。

我想到了这个 awk:

awk -F '[= ]' '{delete a; a[]++; printf "%s=%s", , ; 
   for (i=3; i<=NF; i++) if (!a[$i]++) printf "%s%s", OFS, $i; print ""}' file

LINE1=hello world
LINE2=hello world
LINE3=hello
$ awk 'BEGIN {FS="( |=)"} {for(i=1;i<=NF;i++) {if(!seen[$i]++) printf "%s%s", $i, (i==1?"=":OFS)} printf ORS; delete seen}' file
LINE1=hello world 
LINE2=hello world 
LINE3=hello 
awk 'NF--{sub(/hello/,"world",)}/LINE3/{sub(/world/,"")}1' file

LINE1=hello world
LINE2=hello world
LINE3=hello