2016-09-01 5 views
1

Ich versuche, doppelte Zeichenfolgen in Zeilen in einer Datei zu entfernen. Ich habe versucht, uniq, aber das funktioniert nur für das Entfernen von doppelten Zeilen, nicht doppelte Zeichenfolgen in Zeilen.Entfernen von doppelten Zeichenfolgen aus Zeilen in einer Datei

Ich interessiere mich nur für die "Wörter" nach dem Zeichen = und dass "Wörter" eine Folge von Nicht-Leerzeichen sind, aber nicht = Zeichen enthalten können.

Meine Datei sieht wie folgt aus:

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

Was ich es so aussehen möchten:

LINE1=hello world 
LINE2=hello world 
LINE3=hello 

Antwort

2

Dies ist eine mögliche Interpretation dessen, was Sie vielleicht suchen:

$ 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 

Es basiert auf vielen Annahmen, aber hauptsächlich, dass Sie nur die "Wörter" nach deminteressierensignieren und dass "Wörter" eine beliebige Folge von Nicht-Leerzeichen sind, aber keine = Zeichen enthalten können.

+1

Brilliant! Danke –

+0

Schnellste gewinnt! –

1

ich kam mit dieser awk bis:

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

Das funktioniert auch. Vielen Dank! –

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

LINE1=hello world 
LINE2=hello world 
LINE3=hello 
Verwandte Themen