Per determinare la lunghezza massima di ogni colonna in un file CSV separato da virgole ho hackerato insieme uno script bash. Quando l'ho eseguito su un sistema Linux ha prodotto l'output corretto, ma ho bisogno che funzioni su OS X e si basa sulla versione GNU di wc
utilizzabile con il parametro -L
per --max-line-length
.
La versione di wc
su OSX non supporta quell'opzione specifica e sto cercando un'alternativa.
La mia sceneggiatura (che non è così buona, riflette le mie scarse capacità di sceneggiatura):
#!/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
Quali stampe:
Column1: 6
Column2: 7
Column3: 4
Column4: 4
Column5: 3
Per il mio file di prova:
123,eeeee,2323,tyty,3
154523,eegfeee,23,yty,343
So che l'installazione di GNU CoreUtils tramite Homebrew potrebbe essere una soluzione, ma non è un percorso che voglio intraprendere perché sono sicuro che può essere risolto senza modificare il sistema.
Risposta accettata:
perché non usare awk?
Non ho un Mac da testare, ma length() è una funzione piuttosto standard in awk, quindi dovrebbe funzionare.
awk file:
{ 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] ;
}
quindi esegui
mybox$ awk -F, -f test.awk a.txt
Columen4: 4
Columen5: 3
Columen1: 6
Columen2: 7
Columen3: 4