Para determinar la longitud máxima de cada columna en un archivo csv separado por comas, armé un script bash. Cuando lo ejecuté en un sistema Linux, produjo la salida correcta, pero necesito que se ejecute en OS X y depende de la versión GNU de wc
que se puede usar con el parámetro -L
para --max-line-length
.
La versión de wc
en OSX no es compatible con esa opción específica y estoy buscando una alternativa.
Mi guión (que no es tan bueno, supongo que refleja mis pobres habilidades de guión):
#!/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
Que imprime:
Column1: 6
Column2: 7
Column3: 4
Column4: 4
Column5: 3
Para mi archivo de prueba:
123,eeeee,2323,tyty,3
154523,eegfeee,23,yty,343
Sé que instalar GNU CoreUtils a través de Homebrew podría ser una solución, pero ese no es el camino que quiero tomar, ya que estoy seguro de que se puede resolver sin modificar el sistema.
Respuesta aceptada:
¿Por qué no usar awk?
No tengo una Mac para probar, pero length() es una función bastante estándar en awk, por lo que debería funcionar.
archivo 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] ;
}
entonces corre
mybox$ awk -F, -f test.awk a.txt
Columen4: 4
Columen5: 3
Columen1: 6
Columen2: 7
Columen3: 4