Удаление повторяющихся строк из строк в файле
Я пытаюсь удалить дубликаты строк внутри строк в файле. Я попытался использовать 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