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
)
答え2
BCに似たものを送ってください
12 34 56 22 56 98
文字列を操作できません。
編集する努力する
amt=$(cat custbills.cmp| cut -c86-99 |awk '{s+=$1 } END {print s }')