Waren Sie schon einmal in der Situation, mit CSV-Dateien zu arbeiten und Ausgaben im strukturierten Tabellenformat zu erstellen? Kürzlich habe ich mit der Datenbereinigung an einer Datei gearbeitet, die nicht die richtige Struktur hat. Es gibt so viele Leerzeichen zwischen den einzelnen Spalten, dass ich es in das CSV-Format konvertieren muss, um es in die Datenbank zu übertragen. Nachdem ich die Ausgabe im CSV-Format bereinigt und erstellt habe, ist meine Ausgabe optisch nicht ansprechend, um die Datenintegrität in der CSV-Datei zu überprüfen. Dies ist der Zeitpunkt, an dem mir der Befehl „Spalte“ nützlich ist.
Laut Manpage ist dieSpalteBefehl „Spaltenlisten“. In einfachen Worten, dieSpalteist ein einfaches Dienstprogramm, das Ihre Ausgabe in eine formatieren kannSpalteFormat (Zeilen und Felder) basierend auf der Struktur Ihrer Quelldatei. DerSpalteDer Befehl ist Teil des util-linux-Pakets.
Ein wichtiger Punkt ist hier zu beachtenSpalteBefehl verhält sich anders inUnd. Der Grund dafür ist, dass die Debian-basierte Distribution „Spalte" ausbsdmainutilsanstelle von util-linux. Die Upstream-Version vonSpalteDer Befehl ist neuer als derbsdmainutilsPaket. Werfen Sie einen Blick auf dieFehlerberichtum mehr darüber zu erfahren.
$ dpkg -S $(which column)

Zu Demonstrationszwecken verwende ichCentOS 7und zeigt verschiedene Optionen dazwischenUbuntuUndCentOS 7. Um das zu überprüfenSpalteVersion führen Sie den folgenden Befehl aus. Dieser Befehl zeigt auch das anutil-linuxPaketversion.
$ column --version # will not work in Debian/ubuntu
Sie können die Version von util-linux auch überprüfen, indem Sie die folgenden Befehle ausführen.
$ rpm -qa | grep -i util-linux # Redhat,Centos,Fedora,Amazon Linux $ dpkg -l | grep -i util-linux # Ubuntu
Vor der Verwendung desSpaltecommand Ein guter Ausgangspunkt ist die Manpage und die Erkundung der Optionen.
$ man column
Listen Sie den Dateiinhalt im Tabellenformat auf
DerSpalteBefehl kannals Argument zusammen mit dem-t
Flagge. Ich benutze/etc/passwdals Eingabedatei.
$ column -t /etc/passwd

Wenn Sie sich das obige Bild ansehen, denken Sie vielleicht, dass dies nicht unseren Erwartungen entspricht und die Ausgabe möglicherweise seltsam aussieht. Ja! Du hast Recht.SpaltenhaltenLeerzeichen als Standardtrennzeichenbeim Erstellen einer Tabelle. Dieses Verhalten kann durch die Übergabe eines benutzerdefinierten Trennzeichens außer Kraft gesetzt werden.
Benutzerdefinierte Begrenzung
Benutzerdefinierte Trennzeichen bieten Ihnen eine Vielzahl von Optionen zum Arbeiten. Um ein benutzerdefiniertes Trennzeichen zu erstellen, verwenden Sie-s
Flag gefolgt von einem Trennzeichen. Jetzt werden wir verwenden“:”
als Trennzeichen zum Teilen/etc/passwdDatei.
$ column -s ":" -t /etc/passwd

Schauen Sie sich das Bild oben an, in dem die Tabelle gut formatiert und strukturiert ist. Ausutil-linuxVersion 2.23-Option-s
wurde geändert, um nicht gierig zu sein.
Führen Sie nun den gleichen Befehl ausUbuntuund das Ergebnis wird gierig sein. Das liegt daranSpalteBefehl (bsdmainutils) AnUbuntubehandelt mehrere benachbarte Wörter als ein einzelnes Wort.
$ column -s ":" -t /etc/passwd

Um dieses Verhalten zu überwinden, verwenden Sie-n
Flagge.
$ column -t -s ":" -n /etc/passwd # Only on Debian/Ubuntu

Ignorieren Sie weiße Leerzeilen in der Dateiausgabe
Wenn Ihre Eingabedatei Leerzeilen enthält, ignoriert der Spaltenbefehl diese standardmäßig. Sehen Sie sich meine Eingabedatei an, die im CSV-Format vorliegt. Zwischen jeder Zeile habe ich eine Leerzeile eingefügt. Nun erstellen wir wie zuvor eine Tabelle mit dieser Eingabedatei.
$ column -t -s ";" dummy.txt

Auf dem Bild oben können Sie meine Eingabedatei sehendummy.txthat leere Zeilen und wenn ich versuche, eine Tabelle zu erstellen, werden leere Zeilen ignoriert.
Notiz: Dies ist das Standardverhalten für beide „bsdmainutils/util-linux” Variante desSpalteBefehl. AberSpalte(bsdmainutils) hat die Möglichkeit, dieses Verhalten durch Übergabe zu überschreiben-e
Flagge.
$ column -e -t -s "," dummy.txt # Only on Debian/Ubuntu

Aus dem obigen Bild können Sie ersehen, dass die Tabelle ordnungsgemäß formatiert ist und die Leerzeilen nicht ignoriert werden.
Dateiausgabetrennzeichen
Standardmäßig werden zwei Leerzeichen als Ausgabetrennzeichen verwendet. Dieses Verhalten kann durch Übergeben überschrieben werden-o
Flagge. Es steht Ihnen keine Option zur Ausgabetrennung zur VerfügungSpalte(bsdmainutils).
$ column -t -s "," -o "||" dummy.txt # Only on Rhel based distro

Konvertieren Sie Dateizeilen in Spalten
Mit der-x
Mit der Flagge können Sie Zeilen in Spalten umwandeln. Dieses Verhalten ist bei beiden gleichrhelUndUbuntuVarianten des Spaltenbefehls. Dies ist eine sehr nützliche Funktion, wenn Sie ein bestimmtes Feld durch greifen müssenoder Spaltenbefehl und konvertieren Sie ihn dann in den Header für Ihre CSV-Datei.
$ column -x fillcols.txt

Wenn Sie das ausführenSpalteBefehl ohne Verwendung von Flags ist das gleiche Verhalten wie bei der Übergabe-x
Flagge.
Finden Sie die Spaltengröße
DerSpalteverwendet eine Umgebungsvariable($COLUMNS)
Um die Größe Ihres Terminals herauszufinden und basierend auf der Größe verwenden Sie die, wird die Tabellengröße im Terminal angezeigt.
$ echo $COLUMNS
Schauen Sie sich das Bild unten an. Zunächst habe ich die Größe meines Terminals geändert$COLUMNS
die eingestellte Größe60und führte den Spaltenbefehl aus. Wieder habe ich die Größe meines Terminals geändert$COLUMNS
die eingestellte Größe114und führte den Spaltenbefehl erneut aus. Sie können den Unterschied darin sehen, wie die Spalte die Tabelle ausgibt, wenn wir die Größe des Terminals ändern.
$ column -t -s ":" /etc/passwd | head 5

Das war’s für diesen Artikel. Wenn Sie Feedback haben, geben Sie es bitte im Kommentarbereich an.