Ich versuche, die erste Zeile, die einer Zeichenfolgensuche entspricht, beizubehalten und alle folgenden Zeilen zu entfernen, in denen dieselbe Zeichenfolge übereinstimmt.
Irgendwelche Ideen?
$ cat example-input.txt
Question one|some other text
Question two|dfgdfgdfgvd
Question one| dfg dfg dfg dfg
Question three|aa bb cc dd eee
Question one|zz aa BB yy qq
Question four|zz xx yy qq
cat example-input.txt | someuniqprogramoroptions "Question one" > example-output.txt
$ cat example-output.txt
Question one|some other text
Question two|dfgdfgdfgvd
Question three|aa bb cc dd eee
Question four|zz xx yy qq
$
UPDATE: danke für den awk code G-Man, du bist der Mann!
$ cat example-input.txt | ./awk-firstlines-only.sh
Question one|some other text
Question two|dfgdfgdfgvd
Question three|aa bb cc dd eee
Question four|zz xx yy qq
Antworten:
Basierend auf dem Beispiel, das Sie angegeben haben, erzeugt dieser
awk
Befehl die Ausgabe, nach der Sie fragen:Die ersten beiden Codezeilen stellen sicher, dass jede Eingabezeile a enthält
|
. Der nächste extrahiert die Zeichenfolge vor dem ersten|
Zeichen (z. B. „Frage eins“).count
ist ein assoziatives Array, mit dem wir zählen, wie oft jedes Präfix vorkommt. Wenn dies die Nummer 1 ist (dh das erste Erscheinungsbild), drucken Sie die Zeile aus. Andernfalls drucken Sie nichts.quelle
awk -F'|' '!count[$1]++'
Wenn der erste Teil eine feste Länge hat, ist eine alternative Lichtlösung der Befehl
uniq
kombiniert mitsort
:Dies ist für Ihr Beispiel nicht besonders geeignet, da Sie eine variable Länge haben und Ihre Datei neu angeordnet wird. Dies kann jedoch für ähnliche Jobs nützlich sein, wenn Sie kein Skript schreiben möchten.
quelle
... am Eingang von OPs erzeugt das Beispiel seine Ausgabe.
quelle