Verschiedene Möglichkeiten zur Verwendung des Spaltenbefehls unter Linux

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)
Welche Spalte

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-tFlagge. Ich benutze/etc/passwdals Eingabedatei.

$ column -t /etc/passwd
Dateiinhalte im Tabellenformat auflisten

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-sFlag gefolgt von einem Trennzeichen. Jetzt werden wir verwenden“:”als Trennzeichen zum Teilen/etc/passwdDatei.

$ column -s ":"  -t /etc/passwd
Trennzeichen

Schauen Sie sich das Bild oben an, in dem die Tabelle gut formatiert und strukturiert ist. Ausutil-linuxVersion 2.23-Option-swurde 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
Gierige Ausgabe

Um dieses Verhalten zu überwinden, verwenden Sie-nFlagge.

$ column -t -s ":" -n /etc/passwd             # Only on Debian/Ubuntu
Nicht gierige Ausgabe

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
Leere While-Zeilen ignorieren

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-eFlagge.

$ column -e -t -s "," dummy.txt        # Only on Debian/Ubuntu
Weiße Linien feilen

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-oFlagge. Es steht Ihnen keine Option zur Ausgabetrennung zur VerfügungSpalte(bsdmainutils).

$ column -t -s "," -o "||" dummy.txt	# Only on Rhel based distro
Dateiausgabetrennzeichen

Konvertieren Sie Dateizeilen in Spalten

Mit der-xMit 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
Konvertieren Sie Dateizeilen in Spalten

Wenn Sie das ausführenSpalteBefehl ohne Verwendung von Flags ist das gleiche Verhalten wie bei der Übergabe-xFlagge.

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$COLUMNSdie eingestellte Größe60und führte den Spaltenbefehl aus. Wieder habe ich die Größe meines Terminals geändert$COLUMNSdie 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
Spaltengrößen ändern

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