さまざまな数のフィールドを持つファイルを処理するAWKワンライナー

さまざまな数のフィールドを持つファイルを処理するAWKワンライナー

私がしたかったのは、実際に行に置き換えることができることを知っている小さなスクリプトを作成することでした。さまざまなフィールド数を含む大容量ファイルがあります。私がしたいのは、各レコードの最後のフィールドを合計して(小数点がある数字の場合)...プレースホルダ "%f \ n"でprintfを使用して結果を印刷することです...

答え1

小数点カンマ(ドット)を含む最後のフィールドの合計を計算します。

awk '$NF ~ /\./ { sum += $NF } END { printf("%f\n", sum ) }' file.in

つまり、最後のフィールド()$NFのデータに点がある場合は数字であると仮定してに追加しますsum。最後に、質問で指定された形式で合計を印刷します。

最後のフィールドの整数はスキップされます。

以下は、awk実際のフィールドに関係なく、最後のフィールドを数値として使用する試みを許可します。つまり、11と解釈され、1.21.2と解釈されます。文字列の合計は0になり、hello123として扱われます。boo123abc

awk '{ sum += $NF } END { printf("%f\n", sum) }'

以下は、数値、ピリオド、プラス記号、マイナス記号以外の項目を含むフィールドを合計しません。

awk '$NF ~ /^[-+0-9.]*$/ { sum += $NF } END { printf("%f\n", sum) }'

それでも許可されていますが09+99...(たとえば9)、浮動小数点を一致させることは重要ではなく、一致する必要がある形式によって異なります。たとえば、参照してください。RegExLibサイトのこれらの例より便利なパターンのために。

関連情報