単純化されたcsvファイルのすべてのデータフィールドの最大文字長を計算し、txtとして出力します。

単純化されたcsvファイルのすべてのデータフィールドの最大文字長を計算し、txtとして出力します。

多くのデータフィールド(> 50)を含む単純化されたCSV(1行に最大1行)がある場合は、各データフィールドの最大文字長をどのように計算してから、すべての数をtxtファイルにエクスポートできますか?ところで、列ヘッダーを含むファイルの最初の行を無視したいと思います。

例えば、入力が与えられると

These,are,the,column_headings_which_may_be_very_long_but_they_don't_count
abcdefghij,abcdefghijk,abcdefghijkl,abc
aardvark,bat,cat,dog
ant,bee,cow,abcdefghijklm

最終結果は次のようになります。ここで、最初の列は元のファイルのデータフィールドを表し、2番目の列はフィールドの最大長を表します。

1 | 10
2 | 11
3 | 12
4 | 13

つまり、列1の最長値は長さ10(abcdefghij)、列2の最長値は長さ11(abcdefghijk)です。

私はこのサイトでいくつかの調査を行い、特定のデータフィールドを指定するときに非常に簡単な方法で最大長を計算するいくつかの方法を見つけました。たとえば、ファイル内の2番目のフィールドの最大長を計算するには、cutコマンドとwcコマンドを使用します。

cut -d, -f2 test.csv | wc -L  

しかし、どのようにコマンドを取得し、すべてのデータフィールドに繰り返して出力できますか?

ベストアンサー1

あなたの質問を正しく理解すると、あなたの要件が満たされます。

awk -F, 'NR!=1 { if (max_NF < NF) max_NF = NF;
                 for (i=1; i<=NF; i++) if (max[i] < length($i)) max[i] = length($i) }
         END   { for (i=1; i<=max_NF; i++) printf "%-2d | %d\n", i, max[i] }'

おすすめ記事