カンマ区切りのCSVファイル内の各列の最大長を決定するためにbashスクリプトを作成しました。 Linuxシステムで実行すると正しい出力が生成されますが、OS Xで実行するにはwc
引数が必要な-L
GNUバージョンに依存します--max-line-length
。
OSXバージョンはwc
特定のオプションをサポートしておらず、代わりを探しています。
私のスクリプト(それほど良くありません。私のスクリプトスキルが悪いことを反映しているようです):
#!/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を介してGNU CoreUtilsをインストールすることが解決策である可能性があることを知っていますが、システムを変更せずに解決できると確信しているので、これは私がしたいパスではありません。
ベストアンサー1
なぜ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: %d\n",l,linesize[l] ;
}
その後実行
mybox$ awk -F, -f test.awk a.txt
Columen4: 4
Columen5: 3
Columen1: 6
Columen2: 7
Columen3: 4