it-swarm.com.de

Wie kann ich Spalten verwenden, um Tabulatoren und keine Leerzeichen abzugrenzen?

Ich möchte den Befehl Unix column verwenden, um Text zu formatieren. Ich habe Felder, die durch Tabulatoren begrenzt sind, aber in jedem Feld gibt es auch Leerzeichen. column begrenzt Leerzeichen (Tabulatoren und Leerzeichen). Wie kann ich festlegen, dass Spalten nur Tabulatoren als Trennzeichen verwenden?

Ich habe versucht, tab als Trennzeichen anzugeben, indem ich:

cat myfile | column -t -s"\t"
67
turtle
column -t -s '\t'

würde Spalten auf \ und t Zeichen trennen.

column -s \t Ist dasselbe wie column -s t, Da der Backslash von der Shell als Anführungszeichen interpretiert wird.

Hier möchten Sie ein echtes TAB-Zeichen an die Spalte übergeben. Mit ksh93, zsh, bash, mksh, busybox sh oder FreeBSD sh:

column -ts $'\t'

Oder geben Sie durch Eingabe ein echtes Tabulatorzeichen ein Ctrl-VTab Verwenden Sie an der Shell-Eingabeaufforderung (in Anführungszeichen oder vor einem Backslash, da das Tabulatorzeichen genau wie Leerzeichen ein Token-Trennzeichen in der Shell-Syntax ist) oder "$(printf '\t')" (die doppelten Anführungszeichen, die zum Deaktivieren des Operators split + glob erforderlich sind da das Tabulatorzeichen zufällig auch den Standardwert $IFS hat).

91

Ich habe Folgendes verwendet (funktioniert nur, wenn Ihr Text nicht | Enthält):

cat myfile | tr '\t' '|' | column -t -s '|'

Dadurch werden nur Registerkarten durch Pipes ersetzt und anschließend Spalten mit Pipes als Trennzeichen verwendet.

(Ich habe dies getan, weil ich in Stéphanes Antwort nichts gesehen habe, was in der Fischschale sofort funktioniert hätte. Ansonsten scheint Stéphanes Antwort gut zu sein.)

4
Aaron Feldman

Für POSIX ist $'...', Bekannt als ANSI-C-Escape, nicht definiert.

Stattdessen können Sie $(printf '\t') verwenden:

column -t -s "$(printf '\t')"

$(printf '\011') kann verwendet werden, da 011 (oktale Darstellung von Dezimal 9) der ANSI-Code für ein horizontales Tabulatorzeichen ist:

column -t -s "$(printf '\011')"

Lesen Sie jedoch den Kommentar von Stéphane Chazelas weiter unten, warum dies in allen Shell-Versionen möglicherweise nicht konsistent ist.

4
Nick Bull

Das -t dient zur Auswahl der gewünschten Anzahl von Spalten. Wenn Sie dieses Feld leer lassen, ändert sich nichts. Außerdem möchten Sie Leerzeichen nach dem -s also probier das mal aus:

cat myfile | column -s \t

2
lurker