Ich habe so eine Textdatei
foo bar baz
1 a alpha
2 b beta
3 c gamma
Ich kann awk verwenden, um bestimmte Spalten wie 1 und 3 mit {print $1, $3}
zu drucken, aber ich möchte die zu druckenden Spalten angeben, indem ich stattdessen die Kopfzeile der Spalte wie etwa anspreche {print $foo, $baz}
. Dies ist nützlich, damit ich die Datei nicht öffnen und die Spalten manuell zählen muss, um zu sehen, welche Spalte welche ist, und ich muss das Skript nicht aktualisieren, wenn sich die Spaltennummer oder Reihenfolge ändert. Kann ich das mit awk (oder einem anderen Shell-Tool) machen?
quelle
print i
undprint $i
undprint
f [$ i] `Anweisungen in die Schleife usw. ein, um zu verfolgen, was passiert, wenn dies hilft.Sie fragen nach
awk
, können aber auch ein spezielleres Tool verwenden :csvtool
.oder
quelle
Angenommen, die Datei ist eine TSV-Datei ("tabulatorgetrennte Werte"). Verwenden Sie dazu
csvkit
:Die Ausgabe wird ordnungsgemäß in CSV formatiert, kann jedoch leicht wieder in TSV geändert werden:
Die
-c
Optioncsvcut
kann auch Zahlen und Bereiche annehmen und auch zum Neuanordnen der Spalten der Eingabedaten verwendet werden (eine Funktion, die ich im Standarddienstprogramm häufig vermissecut
).quelle