選択したフィールドの要約

選択したフィールドの要約

86から99の文字位置を持つファイルがあります。RS場所124-125を含む行に対してのみファイル内の総数を合計したいと思います。

これを実行しようとすると、amt=$(cat custbills.cmp| cut -c124-125|grep 'RS'|cut -c86-99|awk '{s+=$1 } END {print s }')0echo $amtが表示されます。これは何の問題ですか?

ファイルのフィールド範囲は86〜111です(たとえば、0000000016.65201406051101「これ16.65は金額です」)。このファイルには300のレコードがあります。

1〜136フィールドのサンプルデータ:reportname 123456-78956 customername 0000000016.65201406051101 10RS 000000

ベストアンサー1

amt=$(
    grep -E '^.{123}RS' custbills.cmp |
    cut -c86-99 | 
    tr '\n' '+' | 
    bc
)

または

amt=$(
    awk '
        substr($0,124,2) == "RS" {amt+=substr($0,86,14)} 
        END {print amt}
    ' custbills.cmp
)

おすすめ記事