Resumir os campos selecionados

1

Eu tenho um arquivo com um valor numérico nas posições de caractere 86 a 99. Quero somar todo o valor presente no arquivo, apenas para linhas que contenham RS na posição 124-125.

Estou tentando fazer como amt=$(cat custbills.cmp| cut -c124-125|grep 'RS'|cut -c86-99|awk '{s+=$1 } END {print s }') e quando eu faço echo $amt está mostrando zero. o que há de errado nisso?

Campos no arquivo de 86 a 111, como 0000000016.65201406051101 Nesse 16.65 é valor. Eu tenho 300 registros neste arquivo.

Dados de amostra de 1 a 136 campos: reportname 123456-78956 customername 0000000016.65201406051101 10RS 000000

    
por Aravind 05.09.2014 / 14:41

2 respostas

2

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

Ou

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

você envia para bc algo como

12 34 56 22 56 98

sem string de operação.

editar tente

amt=$(cat custbills.cmp| cut -c86-99 |awk '{s+=$1 } END {print s }')
    
por 05.09.2014 / 14:45