Abych určil maximální délku každého sloupce v souboru csv odděleném čárkami, hacknul jsem dohromady bash-script. Když jsem to spustil na linuxovém systému, produkoval správný výstup, ale potřebuji, aby běžel na OS X a spoléhá na GNU verzi wc
který lze použít s parametrem -L
pro --max-line-length
.
Verze wc
na OSX tuto konkrétní možnost nepodporuje a já hledám alternativu.
Můj scénář (který není tak dobrý – myslím, že odráží mé špatné skriptovací schopnosti):
#!/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
Které se vytisknou:
Column1: 6
Column2: 7
Column3: 4
Column4: 4
Column5: 3
Pro můj testovací soubor:
123,eeeee,2323,tyty,3
154523,eegfeee,23,yty,343
Vím, že instalace GNU CoreUtils přes Homebrew může být řešením, ale to není cesta, kterou bych se chtěl vydat, protože jsem si jistý, že ji lze vyřešit bez úprav systému.
Přijatá odpověď:
proč nepoužít awk?
Nemám mac na testování, ale length() je v awk docela standardní funkce, takže by to mělo fungovat.
soubor 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] ;
}
pak spusťte
mybox$ awk -F, -f test.awk a.txt
Columen4: 4
Columen5: 3
Columen1: 6
Columen2: 7
Columen3: 4