Verschidde Weeër fir Column Command an Linux ze benotzen


Hutt Dir jeemools an enger Situatioun mat CSV Dateien geschafft an Output am strukturéierten Tabelleformat produzéiert? Viru kuerzem hunn ech mat Datenreinigung geschafft op enger Datei déi net an enger richteger Struktur ass. Et huet sou vill Wäissflächen tëscht all Kolonn an ech muss et an CSV Format konvertéieren fir an d'Datebank ze drécken. Nom Botzen an Erstellt d'Ausgab am CSV-Format, ass meng Ausgab net visuell attraktiv fir d'Datenintegritéit an der CSV-Datei z'iwwerpréiwen. Dëst ass d'Zäit wou de Kommando Kolonn fir mech nëtzlech ass.

Laut Manpage, de Kolumnbefehl \Kolumnéiert Lëschten. An einfache Wierder ass d'Kolonn en einfachen Utility, deen Ären Output an e Kolonnformat (Reihen a Felder) op Basis vun der Struktur vun Ärer Quelldatei formatéiere kann. Deel vum util-linux Package.

E wichtege Punkt fir hei ze notéieren ass de Kolonnbefehl sech anescht am Käferbericht behuelen fir méi iwwer dëst ze wëssen.

$ dpkg -S $(which column)

Fir Demonstratiounszwecker benotzen ech CentOS 7 a weisen verschidden Optiounen tëscht Ubuntu an CentOS 7. Fir d'Kolonnversioun ze kontrolléieren, lafen de folgenden Kommando. Dëse Kommando wäert och d'Util-Linux Package Versioun weisen.

$ column --version  # will not work in Debian/ubuntu

Dir kënnt och d'Versioun vum util-linux iwwerpréiwen andeems Dir déi folgend Kommandoen ausféiert.

$ rpm -qa | grep -i util-linux   # Redhat,Centos,Fedora,Amazon Linux
$ dpkg -l | grep -i util-linux    # Ubuntu

Ier Dir de Kolonnbefehl benotzt, ass eng gutt Plaz fir unzefänken d'Man-Säit a seng Optiounen ze entdecken.

$ man column

Lëscht Dateiinhalt am Tabularformat

De Kolonnbefehl kann eng Tabell erstellen andeems de Dateinumm als Argument zesumme mam -t Fändel passéiert. Ech benotzen /etc/passwd als Inputdatei.

$ column -t /etc/passwd

Wann Dir dat uewe Bild kuckt, mengt Dir vläicht datt dëst net ass wat mir erwaart hunn an d'Ausgab ka komesch ausgesinn. Jo! Du hues Recht. Kolonnen betruecht de Raum als Default Delimiter wann Dir en Dësch erstellt. Dëst Verhalen kann iwwerschratt ginn andeems Dir e personaliséierten Ofgrenzer passéiert.

Benotzerdefinéiert Delimeter

Benotzerdefinéiert Delimiter ginn Iech eng breet Palette vun Optiounen fir mat ze schaffen. Fir e personaliséierten Ofgrenzer ze kreéieren benotzt -s Fändel gefollegt vun engem Ofgrenzer. Elo benotze mir \: als Ofgrenzer fir /etc/passwd Datei opzedeelen.

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

Kuckt d'Bild hei uewen wou den Dësch gutt formatéiert a strukturéiert ass. Vun util-linux Versioun 2.23 Optioun -s gouf geännert fir net giereg ze sinn.

Fuert elo dee selwechte Kommando an Ubuntu an d'Resultat wäert giereg sinn. Dëst ass well de Kolonnbefehl (bsdmainutils) op Ubuntu e puer ugrenzend Wierder als eenzegt Wuert behandelt.

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

Fir dëst Verhalen ze iwwerwannen benotzt -n Fändel.

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

Ignoréieren wäiss eidel Linnen am Fichier Output

Wann Dir eidel Zeilen an Ärer Inputdatei hutt, ignoréiert de Kolonnbefehl et par défaut. Kuckt meng Inputdatei déi am CSV Format ass an ech hunn eng eidel Linn tëscht all Zeil bäigefüügt. Loosst eis elo en Dësch erstellen wéi mir virdru mat dëser Inputdatei gemaach hunn.

$ column -t -s ";" dummy.txt

Vun der uewen Bild kënnt Dir meng Input Fichier gesinn dummy.txt huet eidel Linnen a wann ech probéieren eng Tabell ze schafen, eidel Linnen sinn ignoréiert.

Bemierkung: Dëst ass d'Standardverhalen fir béid \bsdmainutils/util-linux Variant vum Kolonnbefehl. Awer Kolonn (bsdmainutils) huet d'Méiglechkeet dëst Verhalen ze iwwerschreiden andeems Dir -e Fändel passéiert.

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

Aus dem uewe Bild kënnt Dir gesinn datt den Dësch richteg formatéiert ass an déi eidel Linnen net ignoréiert ginn.

Datei Output Separator

Par défaut ginn zwee wäiss Plazen als Ausgangsseparator benotzt. Dëst Verhalen kann iwwerschratt ginn andeems Dir -o Fändel passéiert. Dir wäert keng Ausgangsseparatoroptioun an der Kolonn verfügbar hunn (bsdmainutils).

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

Konvertéiert Dateireihen a Kolonnen

Mat dem -x de Fändel kënnt Dir Reihen a Kolonnen ëmsetzen. Dëst Verhalen ass d'selwecht a béid rhel an Ubuntu Varianten vum Kolonnbefehl. Dëst ass eng ganz nëtzlech Feature wann Dir e bestëmmte Feld duerch den awk oder Kolonnbefehl gräifen musst, da konvertéiert se an den Header fir Är CSV Datei.

$ column -x fillcols.txt

Wann Dir de Kolonnbefehl leeft ouni Fändelen ze benotzen, ass d'Behuele d'selwecht wéi de -x Fändel.

Fannt Kolonngréisst

D'Kolonn benotzt eng Ëmweltvariabel ($COLUMNS) fir d'Gréisst vun Ärem Terminal erauszefannen a baséiert op der Gréisst benotzt den Echo Kommando, Tabellgréisst gëtt am Terminal ugewisen.

$ echo $COLUMNS

Kuckt d'Bild hei drënner. Am Ufank hunn ech mäi Terminal geännert fir $COLUMNS d'Gréisst op 60 ze hunn an hunn de Kolonnbefehl ausgefouert. Nach eng Kéier hunn ech mäi Terminal geännert fir $COLUMNS d'Gréisst op 114 ze hunn an d'Kolonnkommando erëm auszeféieren. Dir kënnt den Ënnerscheed gesinn wéi d'Kolonn den Dësch dréckt wa mir d'Gréisst vum Terminal änneren.

$ column -t -s ":" /etc/passwd | head 5

Dat ass et fir dësen Artikel. Wann Dir e Feedback hutt, gitt et w.e.g. an der Kommentarsektioun.