Unixでファイルの行全体の平均列数と最大列数を計算する方法は?

Unixでファイルの行全体の平均列数と最大列数を計算する方法は?

次のファイルがあります。

1
2 4 5 6 7 19
20
22
24 26 27 
29 30 31 32 34 40 50 56 58
234 235 270 500
1234 1235 1236 1237
2300

私の実際のデータファイルが非常に大きいことを考えると。そのため、このデータファイルの最大数がどれくらいかを確認したいと思います。また、1行に平均していくつかの列があることを確認したいと思います。この小さな例の例では、最大列数は9(行5)、行内の平均列数は3.33です。どんな提案がありますか?

ベストアンサー1

$ awk 'NF > m { m = NF } { s += NF } END { printf("Max = %d\nAvg = %g\n", m, s/NR) }' data.in
Max = 9
Avg = 3.33333

スクリプトawkは、フィールドの最大数(列)mとフィールド数の合計を追跡しますs。入力ストリームの終わりに達すると、収集された統計が出力されます。

現在のレコード(行)のフィールド数は個でありNF、これまで読んだレコード数は個ですNR

次のバージョンでは、フィールド数が最も多いレコードも追跡します。

awk 'NF > m { m = NF; r = NR } { s += NF } END { printf("Max = %d (%d)\nAvg = %g\n", m, r, s/NR) }' data.in
Max = 9 (6)
Avg = 3.33333

おすすめ記事