multiplicação de cada linha

multiplicação de cada linha

Gostaria de calcular um valor em cada linha de um arquivo como este:

1  1441792,11534336
2  1048576,8388608
3  1441792,1153433
4  1966080,15728640
5  393216,3145728
6  2621440,20971520
7  2490368,19922944

Preciso adquirir o segundo valor ( 11534336, 8388608, [...]) e multiplicar por, por exemplo, 3, e salvar esse valor em um novo arquivo.

Responder1

awkVocê também pode usar

 awk -F "," '{print $2*3}' src.dat  > newfile

onde
src.datestão seus dados de origem (entrada)
newfileo novo arquivo (saída)
-F ","usado como separador de campo ,
$2é usado para pegar o segundo campo (o que está depois do ,)

Responder2

Como é aritmética de números inteiros, você provavelmente poderia fazer isso diretamente no shell - por exemplo, embash

while IFS="$IFS," read n x y; do printf '%d\n' "$((3*y))"; done < file > newfile

Testando parastdout

$ while IFS="$IFS," read n x y; do printf '%d\n' "$((3*y))"; done < file
34603008
25165824
3460299
47185920
9437184
62914560
59768832

Responder3

Aqui está dce sedfazendo o trabalho:

#v#backref courtesy Stephane's comment#v#
sed 's/.*,\(.*\)/[&,]P\1 *3p/' <<-\DATA | dc
    1  1441792,11534336
    2  1048576,8388608
    3  1441792,1153433
    4  1966080,15728640
    5  393216,3145728
    6  2621440,20971520
    7  2490368,19922944
DATA

SAÍDA

1  1441792,11534336,34603008
2  1048576,8388608,25165824
3  1441792,1153433,3460299
4  1966080,15728640,47185920
5  393216,3145728,9437184
6  2621440,20971520,62914560
7  2490368,19922944,59768832

Isso émuitorápido.

Você pode fazer o mesmo sem referências anteriores - se isso fizer alguma diferença - desta forma:

 sed 's/^/[/;s/[^,]*$/&,]P& 3*p/' <file | dc

Se você não quer todos juntos e quer apenas os resultados é mais fácil ainda:

sed 's/.*,//;s/$/ 3*p/' <file | dc

E se você quiser as linhas numeradas:

sed 's/.*,//;s/$/ 3*p/' <file | dc | nl

informação relacionada