multiplicación de cada línea

multiplicación de cada línea

Me gustaría calcular un valor en cada línea de un archivo como este:

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

Necesito adquirir el segundo valor ( 11534336,, 8388608[...]) y multiplicarlo, por ejemplo, por 3, y guardar este valor en un archivo nuevo.

Respuesta1

awkTu también puedes usar

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

¿Dónde
src.datestán sus datos de origen (entrada)?
newfileEl nuevo archivo (salida)
-F ","se usa como separador de campo y ,
$2se usa para tomar el segundo campo (lo que está después de ,)

Respuesta2

Dado que es aritmética de enteros, probablemente podrías hacerlo directamente en el shell, por ejemplo enbash

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

Prueba parastdout

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

Respuesta3

Aquí está dcy sedhaciendo el trabajo:

#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

PRODUCCIÓN

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

Esmuyrápido.

Puedes hacer lo mismo sin ninguna referencia retrospectiva, si hay alguna diferencia, de esta manera:

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

Si no los quieres todos juntos y quieres sólo los resultados, es aún más fácil:

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

Y si quieres las líneas numeradas:

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

información relacionada