Ich habe versucht, eine Lösung für diese Frage zu finden. Ich wollte awk
fü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 awk
Befehl 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 venkat
und venkat3
in der Ausgabe erhalte ?
Wenn ich printf
statt print
in meinem verwende awk
, bekomme ich venkatvenkat3
als 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 $1
Spalte vorkommen?
Ich wollte so etwas erreichen wie:
awk -F "_" '$2==1{print $1}' file
BEARBEITEN
Ich habe die awk
Lösung von Stephane nicht bemerkt . Tut es dasselbe, was ich erwähnt hatte?
awk
macht 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 wiedoglion
und nicht nurdog_lion
.Antworten:
Frage 1
Frage 2
quelle
venkat
undvenkat3
gemäß dem OP in der anderen Frage gestellt. Ich versuche herauszufinden, ob der Schlüssel danach_
in meiner$1
Spalte vorhanden ist.Für Frage 1 können Sie die Option
--only-delimited
(-s
) von verwendencut
quelle
Ein anderer Ansatz:
Frage 1
Dies wird nur gedruckt, wenn
$2
es definiert ist. Es ist eine kürzere Schreibweise:Frage 2
Sie müssen nichts hinzufügen, was noch nicht angesprochen wurde.
quelle
Frage 1
Frage 2
quelle
venkat
undvenkat3
als Ausgabe zu erhalten, wie sie in vorhanden sind$1
. Ich erhalte jedoch alle$1
Werte gemäß Ihrem Befehl.$2
Eintrag erhalten,$2
der in der 1. Spalte vorkommt. Ist das richtig?