Substitua 6 por total (número de linhas + 1), se necessário:
awk '{mult+=$2*(6-NR); sum+=$2;} END {print mult/sum;}' yourfile.txt
Exibe: 3.06667
Eu tenho várias colunas de dados. Eu sempre tenho o mesmo número de linhas (digamos 5). Na segunda coluna, quero multipy o primeiro valor por 5, em seguida, o segundo valor por 4, o terceiro valor por 3, etc. Então eu quero somar esses valores, e dividir pela soma dos valores na segunda coluna . Como eu faria isso em sed e / ou awk?
Exemplo:
4 5 7 1 2 3
5 1 2 3 1 2
4 2 3 6 1 2
3 4 1 6 3 3
2 3 1 2 1 6
Resposta: (5*5 + 4*1 + 3*2 + 2*4 + 1*3)/(5 + 1 + 2 + 4 + 3) = 3.067
Se no caso o número total de linhas não for conhecido
$ cat file
4 5 7 1 2 3
5 1 2 3 1 2
4 2 3 6 1 2
3 4 1 6 3 3
2 3 1 2 1 6
$ awk 'FNR==NR{t = NR+1;next}{mult+=$2*(t-FNR);sum+=$2}
END{print mult/sum}' file{,}
3.06667
Explicação
awk 'FNR == NR{t=NR+1;next}
FNR variable - > Número da linha atual no arquivo atual
NR variable - > O número total de linhas vistas até o momento
A condição FNR == NR só pode ser verdadeira enquanto o awk estiver lendo o primeiro arquivo de argumento
t=NR+1 - > variável t contém contagem de linhas +1 extra, pois é necessário em nosso contexto atual
next - > Pára o processamento do registro de entrada atual e prossegue com o próximo registro de entrada
mult+=$2*(t-FNR) - > a variável mult contém alguns (5*(t-FNR) + ..... + 4*1 + 3*2 + 2*4 + 1*3)
sum+=$2 - > variável sum contém soma de coluna2
END - > Uma regra END é executada uma vez, depois que toda a entrada foi lida
print mult/sum - > Finalmente imprima mult / soma
file{,} - > você também pode arquivar file file mas eu usei atalho este truque bash você pode dizer, tente echo file{,} e echo file{,,} no seu terminal.
Boa sorte
Akshay.