Удаление повторяющихся строк из строк в файле

Я пытаюсь удалить дубликаты строк внутри строк в файле. Я попытался использовать uniq, однако это работает только для удаления повторяющихся строк, а не повторяющихся строк в строках.

Я забочусь только о "словах" после знака "=" и о том, что "слова" представляют собой любую последовательность непробелов, но не могут содержать знаки "=".

Мой файл выглядит следующим образом:

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

Как бы я хотел, чтобы это выглядело так:

LINE1=hello world
LINE2=hello world
LINE3=hello

4 ответа

Решение

Это одна из возможных интерпретаций того, что вы можете искать:

$ 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 '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",$2)}/LINE3/{sub(/world/,"")}1' file

LINE1=hello world
LINE2=hello world
LINE3=hello 
Другие вопросы по тегам