Ich habe versucht, eine Lösung für diese Frage zu finden. Ich wollte awkfür die Lösung verwenden.
Meine Eingabedatei ist ungefähr so wie unten.
-bash-3.2$ cat file
ramesh
ramesh_venkat
ramesh3_venkat3
ramesh4
ramesh5
venkat
venkat3
venkat4
Ich habe den awkBefehl verwendet, um die zweiten Werte nach _wie folgt zu extrahieren .
awk -F "_" '{print $2}' file
Obwohl der obige Befehl die korrekten Werte druckt, werden in meiner Ausgabe leere Zeilen angezeigt. Ich habe 2 Fragen.
Frage 1
Wie kann ich die Leerzeilen in der Ausgabe entfernen, damit ich nur venkatund venkat3in der Ausgabe erhalte ?
Wenn ich printfstatt printin meinem verwende awk, bekomme ich venkatvenkat3als Ausgabe, was ich nicht erreichen wollte. Ich möchte die Ausgabe wie,
venkat
venkat3
Frage 2
Wie kann ich anhand dieser Werte als assoziatives Array oder ähnliches feststellen, ob die Werte tatsächlich in der $1Spalte vorkommen?
Ich wollte so etwas erreichen wie:
awk -F "_" '$2==1{print $1}' file
BEARBEITEN
Ich habe die awkLösung von Stephane nicht bemerkt . Tut es dasselbe, was ich erwähnt hatte?
awkmacht nicht dasselbe. Ihr Ansatz geht davon aus, dass ein Wort nur dann in einem anderen enthalten sein kann, wenn es durch getrennt ist_. Während dies für das Beispiel des OP gilt, befassen sich alle veröffentlichten Antworten auch mit Fällen wiedoglionund nicht nurdog_lion.