awk - tiempo - Cómo restar un número constante de una columna
sumar y restar en excel al mismo tiempo (3)
¿Hay una manera de restar el valor más pequeño de todos los valores de una columna? Necesito restar el primer número de la primera columna de todos los demás números de la primera columna.
Escribí este script, pero no está dando el resultado correcto:
$ awk ''{$1 = $1 - 1280449530}'' file
1280449530 452
1280449531 2434
1280449531 2681
1280449531 2946
1280449531 1626
1280449532 3217
1280449532 4764
1280449532 4501
1280449532 3372
1280449533 4129
1280449533 6937
1280449533 6423
1280449533 4818
1280449534 4850
1280449534 8980
1280449534 8078
1280449534 6788
1280449535 5587
1280449535 10879
1280449535 9920
1280449535 8146
1280449536 6324
1280449536 12860
1280449536 11612
Estabas en el camino correcto:
awk ''{$1 = $1 - 1280449530; print}'' file
Aquí hay una versión simplificada del segundo ejemplo de Michael:
awk ''NR == 1 {origin = $1} {$1 = $1 - origin; print}'' file
Lo que tienes esencialmente funciona, simplemente no lo estás emitiendo. Esto producirá lo que quieras:
awk ''{print ($1 - 1280449530) " " $2}'' file
También puedes ser un poco más listo y no codificar la cantidad de turnos:
awk ''{
if(NR == 1) {
shift = $1
}
print ($1 - shift) " " $2
}'' file
script de shell bash
#!/bin/bash
exec 4<"file"
read col1 col2<&4
while read -r n1 n2 <&4
do
echo $((n1-$col1))
# echo "scale=2;$n1 - $col1" | bc # dealing with decimals..
done
exec >&4-