Bash 从文件中的行中删除重复字符串
我试图删除文件中行内的重复字符串。我尝试使用uniq,但是这只适用于删除重复的行,而不适用于行中的重复字符串 我只关心=符号后面的单词,而且单词是任何非空格序列,但不能包含=符号 我的文件如下所示: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 这是对您可能正在寻找的内容的一种
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
明亮的谢谢你,我赢了!明亮的谢谢你,我赢了!