カンマ区切りのcsvファイルの各列の最大長を決定するために、bashスクリプトを一緒にハックしました。 Linuxシステムで実行すると正しい出力が生成されましたが、OS Xで実行する必要があり、GNUバージョンのwc
に依存しています。 パラメータ-L
で使用できます --max-line-length
の場合 。
wc
のバージョン on OSXはその特定のオプションをサポートしておらず、代替手段を探しています。
私のスクリプト(これはそれほど良くありません-私が推測する私の貧弱なスクリプトスキルを反映しています):
#!/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
印刷するもの:
Column1: 6
Column2: 7
Column3: 4
Column4: 4
Column5: 3
私のテストファイルの場合:
123,eeeee,2323,tyty,3
154523,eegfeee,23,yty,343
Homebrewを介してGNUCoreUtilsをインストールすることが解決策になる可能性があることは知っていますが、システムを変更しなくても解決できると確信しているため、これは私がたどりたい道ではありません。
承認された回答:
awkを使ってみませんか?
テストするMacはありませんが、length()はawkのかなり標準的な関数なので、これで機能するはずです。
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] ;
}
次に実行します
mybox$ awk -F, -f test.awk a.txt
Columen4: 4
Columen5: 3
Columen1: 6
Columen2: 7
Columen3: 4