GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Maximale Spaltenlänge für jede Spalte in einer vereinfachten CSV-Datei bestimmen (eine Zeile pro Zeile)?

Um die maximale Länge jeder Spalte in einer kommagetrennten CSV-Datei zu ermitteln, habe ich ein Bash-Skript zusammengehackt. Als ich es auf einem Linux-System ausgeführt habe, erzeugte es die richtige Ausgabe, aber ich brauche es, um es unter OS X auszuführen, und es basiert auf der GNU-Version von wc die mit dem Parameter -L verwendet werden kann für --max-line-length .

Die Version von wc unter OSX unterstützt diese spezielle Option nicht und ich suche nach einer Alternative.

Mein Skript (das nicht so gut ist – es spiegelt meine schlechten Skriptfähigkeiten wider, denke ich):

#!/bin/bash

for((i=1;i< `head -1 $1|awk '{print NF}' FS=,`+1 ;i++));
    do echo  | xargs echo -n "Column$i: " && 
    cut -d, -f $i $1 |wc -L  ; done

Was druckt:

Column1: 6
Column2: 7
Column3: 4
Column4: 4
Column5: 3

Für meine Testdatei:

123,eeeee,2323,tyty,3
154523,eegfeee,23,yty,343

Ich weiß, dass die Installation von GNU CoreUtils über Homebrew eine Lösung sein könnte, aber das ist kein Weg, den ich einschlagen möchte, da ich sicher bin, dass es gelöst werden kann, ohne das System zu modifizieren.

Akzeptierte Antwort:

Warum nicht awk verwenden?

Ich habe keinen Mac zum Testen, aber length() ist eine ziemliche Standardfunktion in awk, also sollte das funktionieren.

awk-Datei:

 { for (i=1;i<=NF;i++) {
    l=length($i) ;
    if ( l > linesize[i] ) linesize[i]=l ;
  }
}
END {
    for (l in linesize) printf "Columen%d: %dn",l,linesize[l] ;
}

dann ausführen

mybox$ awk -F, -f test.awk  a.txt
Columen4: 4
Columen5: 3
Columen1: 6
Columen2: 7
Columen3: 4

Linux
  1. Robustes Befehlszeilentool zum Verarbeiten von CSV-Dateien?

  2. ^M am Ende jeder Zeile in vim

  3. cut- oder awk-Befehl, um das erste Feld der ersten Zeile zu drucken

  4. Konvertieren von JSON-Pretty-Print in eine Zeile

  5. ulimit für root-Benutzer bestimmen

8 Tipps für die Linux-Kommandozeile

Eine Reihe von Befehlen mit einem Sudo ausführen?

Wie ändere ich die Standardzeilenlänge für Od und Hexdump?

Existiert ein Liner zum Überprüfen der Datei?

Einzeilige Bedingungsüberprüfung im Makefile?

Die Bash FOR-Schleife erklärt und vereinfacht