簡略化されたcsvファイルの各列の最大列長の決定(1行あたり1行)

簡略化されたcsvファイルの各列の最大列長の決定(1行あたり1行)

カンマ区切りのCSVファイル内の各列の最大長を決定するためにbashスクリプトを作成しました。 Linuxシステムで実行すると正しい出力が生成されますが、OS Xで実行するにはwc引数が必要な-LGNUバージョンに依存します--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

おすすめ記事