2016-09-01 4 views
1

파일의 행에서 중복 문자열을 제거하려고합니다. 나는 uniq를 사용해 보았지만, 이것은 중복 된 줄을 제거 할 때만 작동하고, 줄에 중복 된 줄은 사용하지 않는다.파일의 행에서 중복 문자열 제거

나는 = 기호 다음에 나오는 "단어"에만 관심이 있고 "단어"는 공백이 아닌 임의의 순서이지만 = 기호는 포함 할 수 없습니다.

내 파일처럼 보이는 다음 : 나는 그것을 같이하고 싶은 무엇

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

:

LINE1=hello world 
LINE2=hello world 
LINE3=hello 

답변

2

입니다 당신이 찾고 수 있습니다 무엇을 하나의 가능한 해석 :

$ 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 

이것은 많은 가정에 기반을두고 있지만 주로는이후의 "단어"에만 관심이 있다는 것입니다.기호이고 "단어"는 공백이 아닌 임의의 순서이지만 = 기호를 포함 할 수 없습니다.

+1

브릴리언트! 고마워요 –

+0

가장 빠른 사람이 이긴다! –

1

나는이 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 
1
$ 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 
+0

이것도 작동합니다. 감사! –

0
awk 'NF--{sub(/hello/,"world",$2)}/LINE3/{sub(/world/,"")}1' file 

LINE1=hello world 
LINE2=hello world 
LINE3=hello