Die Ausgabe meines Befehls ist ungefähr so:
1540 "A B"
6 "C"
119 "D"
Die erste Spalte ist immer eine Zahl, gefolgt von einem Leerzeichen und einer Zeichenfolge in doppelten Anführungszeichen.
Mein Zweck ist es, nur die zweite Spalte zu erhalten, wie:
"A B"
"C"
"D"
Ich wollte verwenden <some_command> | awk '{print $2}'
, um dies zu erreichen. Die Frage ist jedoch, dass einige Werte in der zweiten Spalte Leerzeichen enthalten, die zufällig das Standardtrennzeichen für awk
die Trennung der Felder sind. Daher ist die Ausgabe durcheinander:
"A
"C"
"D"
Wie erhalte ich den Wert der zweiten Spalte (mit gepaarten Anführungszeichen) sauber?
awk '{$1=""; print $0}'
, aber es hat immer noch einen führenden Leerraumcharakter. Es könnte von entfernt werdensed '/^ //'
. Könnte dies jedoch getan werdenawk
?Antworten:
Oder verwenden Sie sed & regex.
quelle
<some_command> | sed 's/.* \(".*"\)/\1/'
Verwenden Sie
-F [field separator]
, um die Zeilen auf"
s zu teilen :oder für die Eingabe von der Leitung
Ausgabe:
quelle
'{print "\""$2"\""}'
"\"" + $2 + "\""
. Die umgebenden Anführungszeichen geben an, dass etwas an die Ausgabe angehängt werden soll, und das maskierte Anführungszeichen (\"
) wird gedruckt. Um dies zu veranschaulichen, würde es so aussehen, wenn wir$2
anstelle von Anführungszeichen Leerzeichen einfügen möchten :'{print " "$2" "}'
. Wir können auch Formatabstände hinzufügen, um das Grok ein wenig zu vereinfachen:'{print " " $2 " "}'
Wenn Sie etwas anderes als "awk" verwenden könnten, versuchen Sie dies stattdessen
-d ist ein Trennzeichen, -f ist das zu schneidende Feld und mit -f2- wollen wir das 2. Feld bis zum Ende schneiden.
quelle
-d
? Auf diese Weise sieht es etwas seltsam aus.Dies sollte funktionieren, um eine bestimmte Spalte aus der Befehlsausgabe "Docker-Images" zu entfernen:
Dadurch wird die dritte Spalte gedruckt
quelle
Dafür brauchst du kein awk. Die Verwendung
read
in der Bash-Shell sollte ausreichen, zoder:
quelle
Wenn Sie GNU awk haben, ist dies die gewünschte Lösung:
quelle
quelle
Angenommen, Sie benennen das Skript als co. Führen Sie beispielsweise Folgendes aus, um die Dateigröße zu ermitteln (im Beispiel wird davon ausgegangen, dass Sie Linux verwenden, das Skript selbst ist jedoch vom Betriebssystem unabhängig): -
ls -lh | co 5
quelle