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