ファイルの合計金額は、シェル変数に単一の値として保存する必要があります。

ファイルの合計金額は、シェル変数に単一の値として保存する必要があります。
H|~^20200425|~^abcd|~^sum
R|~^abc|~^2019-03-06T12:33:52.27|~^1000123.34567|~^2018-04-12T12:33:52.27|
R|~^abc|~^2019-03-05T12:33:52.27|~^111930.02876|~^2018-10-23T12:33:52.27|
R|~^abc|~^2019-03-05T12:33:52.27|~^2112320.028|~^2018-10-24T12:33:52.27|
R|~^abc|~^2019-03-06T12:33:52.27|~^12230.0809|~^2018-09-11T12:33:52.27|
R|~^abc|~^2019-03-05T12:33:52.27|~^3076543789.00878|~^2018-08-05T12:33:52.27|
R|~^abc|~^2019-03-06T12:33:52.27|~^156655.0389|~^2018-10-23T12:33:52.27|
R|~^abc|~^2019-03-06T12:33:52.27|~^10453.0489|~^2018-04-08T12:33:52.27|
R|~^abc|~^2019-03-05T12:33:52.27|~^20654.0907|~^2018-07-23T12:33:52.27|

「R」で始まるレコードの4番目のフィールドから合計金額の合計を取得する必要があります。すべての行の合計を変数に保存したいと思います。達成する方法

ベストアンサー1

variable=$( awk -F '^' '$1 == "R|~" { sum += $4 } END { print sum }' file )

このawkコマンドは、データを^区切りとして扱い、最初のフィールドに含まれる各行の4番目のフィールドを合計してから、すべてのデータをR読み取り、合計を印刷します。|~フィールドデータを数値に変換すると、フィールドの末尾にある非数値データ(文字列)は無視されます。

次に、標準コマンド置換を使用してawkコマンド出力を変数に割り当てます。


非常に大きな数字の場合は、以下を使用してくださいbc

variable=$(
    awk -F '^' '$1 == "R|~" { sub("\\|.*","",$4); print $4 "+\\" } END { print "0" }' file  |
    bc
)

bcこれにより、処理する計算で合計が印刷されます。このbcユーティリティは標準任意の精密電卓。

おすすめ記事