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

Bash 从文件中的行中删除重复字符串,bash,awk,sed,uniq,Bash,Awk,Sed,Uniq,我试图删除文件中行内的重复字符串。我尝试使用uniq,但是这只适用于删除重复的行,而不适用于行中的重复字符串 我只关心=符号后面的单词,而且单词是任何非空格序列,但不能包含=符号 我的文件如下所示: LINE1=hello hello world LINE2=hello world world LINE3=hello hello hello 我希望它看起来像什么: LINE1=hello world LINE2=hello world LINE3=hello 这是对您可能正在寻找的内容的一种

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

我只关心=符号后面的单词,而且单词是任何非空格序列,但不能包含=符号

我的文件如下所示:

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($2,t,/ /); for (i=1;i in t;i++) if (!seen[t[i]]++) words = (words=="" ? "" : words " ") t[i]; print $1 FS words}' file
LINE1=hello world
LINE2=hello world
LINE3=hello

它基于很多假设,但主要是你只关心=符号后面的单词,而且单词是任何非空格序列,但不能包含=符号。

这是你可能要寻找的一种解释:

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

这是基于很多假设,但主要是你只关心=符号后面的单词,而且单词是任何非空格序列,但不能包含=符号。

我提出了这个awk:

awk -F '[= ]' '{delete a; a[$2]++; printf "%s=%s", $1, $2; 
   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:

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

LINE1=hello world
LINE2=hello world
LINE3=hello

明亮的谢谢你,我赢了!明亮的谢谢你,我赢了!