我有一个文件,其字符位置为 86 到 99 的数值。我想总结文件中存在的全部数量,仅适用于包含RS
位置 124-125 的行。
我正在尝试这样做
amt=$(cat custbills.cmp| cut -c124-125|grep 'RS'|cut -c86-99|awk '{s+=$1 } END {print s }')
,当我echo $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 }')