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
0이 표시됩니다. 이게 무슨 문제 야?
파일의 필드 범위는 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 }')