Entfernen Sie leere Zeilen in der Awk-Anzeige

Entfernen Sie leere Zeilen in der Awk-Anzeige

Ich habe versucht, eine Lösung fürDasawkFrage. Ich wollte für die Lösung verwenden .

Meine Eingabedatei sieht ungefähr wie folgt aus.

-bash-3.2$ cat file
ramesh
ramesh_venkat
ramesh3_venkat3
ramesh4
ramesh5
venkat
venkat3
venkat4

Ich habe awkden Befehl verwendet, um die zweiten Werte _wie unten beschrieben zu extrahieren.

awk -F "_" '{print $2}' file

Obwohl der obige Befehl die korrekten Werte ausgibt, erhalte ich in meiner Ausgabe leere Zeilen. Ich habe zwei Fragen.

Frage 1

Wie kann ich die Leerzeilen in der Ausgabe entfernen, sodass ich in der Ausgabe nur venkatund erhalte venkat3?

Wenn ich in meinem printfanstelle von verwende , erhalte ich als Ausgabe, die nicht das ist, was ich erreichen wollte. Ich möchte die Ausgabe wie folgt:printawkvenkatvenkat3

venkat
venkat3

Frage 2

Die Verwendung dieser Werte alsassoziatives Arrayoder so, wie kann ich herausfinden, ob die Werte tatsächlich in der $1Spalte vorkommen?

Ich wollte etwas erreichen wie:

awk -F "_" '$2==1{print $1}' file

BEARBEITEN

Ich habe die Lösung von Stephane nicht bemerkt awk. Tut sie dasselbe, was ich erwähnt habe?

Antwort1

Ein anderer Ansatz:

Frage 1

awk -F_ '$2{print $2}' file

Dies wird nur gedruckt, wenn $2definiert ist. Dies ist eine kürzere Schreibweise:

awk -F_ '{if($2){print $2}}' file

Frage 2

Ich habe nichts hinzuzufügen, was nicht bereits angesprochen wurde.

Antwort2

Frage 1

$ awk -F _ 'NF > 1 {print $2}' file
venkat
venkat3

Frage 2

$ awk -F _ '
    NR == FNR {a[$1];next}
    ($2 in a) {print $2}
' file file
venkat
venkat3

Antwort3

Für Frage 1 könnten Sie die Option --only-delimited( ) verwenden.-scut

cut -s -f2 -d'_' file
venkat
venkat3

Antwort4

Frage 1

awk -F "_" '/_/ {print $2}' file

Frage 2

awk -F "_" '{values[$1]=1;}; END {for (val in values) print val;}' file

verwandte Informationen