GNU/Linux >> Linux の 問題 >  >> Linux

簡略化されたCsvファイル(行ごとに1行)のすべての列の最大列長を決定しますか?

カンマ区切りの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

Linux
  1. Linuxコマンドラインに関する8つのヒント

  2. Csvファイルを処理するための堅牢なコマンドラインツール?

  3. 1つのSudoで一連のコマンドを実行しますか?

  1. OdとHexdumpのデフォルトの行の長さを変更するにはどうすればよいですか?

  2. vim の各行末に ^M

  3. 列値条件で awk を使用する

  1. 最初の行の最初のフィールドを出力する cut または awk コマンド

  2. Grep:1 行あたりの一致数をカウントする

  3. scp の最大速度を設定する