Pour déterminer la longueur maximale de chaque colonne dans un fichier csv séparé par des virgules, j'ai piraté un script bash. Lorsque je l'ai exécuté sur un système Linux, il a produit la sortie correcte, mais j'en ai besoin pour fonctionner sur OS X et il s'appuie sur la version GNU de wc
qui peut être utilisé avec le paramètre -L
pour --max-line-length
.
La version de wc
sur OSX ne prend pas en charge cette option spécifique et je recherche une alternative.
Mon script (qui n'est pas si bon - cela reflète mes faibles compétences en script, je suppose):
#!/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
Qui imprime :
Column1: 6
Column2: 7
Column3: 4
Column4: 4
Column5: 3
Pour mon fichier test :
123,eeeee,2323,tyty,3
154523,eegfeee,23,yty,343
Je sais que l'installation de GNU CoreUtils via Homebrew pourrait être une solution, mais ce n'est pas une voie que je veux emprunter car je suis sûr qu'elle peut être résolue sans modifier le système.
Réponse acceptée :
pourquoi ne pas utiliser awk ?
Je n'ai pas de mac à tester, mais length() est une fonction assez standard dans awk, donc cela devrait fonctionner.
fichier awk :
{ 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] ;
}
puis lancez
mybox$ awk -F, -f test.awk a.txt
Columen4: 4
Columen5: 3
Columen1: 6
Columen2: 7
Columen3: 4