Operaciones aritméticas en la línea de comandos de Linux

Es posible hacer operaciones aritméticas sencillas usando la línea de comandos de Linux que permite hacer operaciones con números enteros usando la forma $((expresión)), como se muestra a continuación:

monstruosoft@monstruosoft-PC:~$ echo $((320 * 240))
76800
monstruosoft@monstruosoft-PC:~$ echo $((320 * 200))
64000
monstruosoft@monstruosoft-PC:~$ MINUTOS=$((60 * 24 * 365))
monstruosoft@monstruosoft-PC:~$ echo $MINUTOS
525600
monstruosoft@monstruosoft-PC:~$ SEGUNDOS=$(($MINUTOS * 60))
monstruosoft@monstruosoft-PC:~$ echo $SEGUNDOS
31536000

Las operaciones de punto flotante no se pueden realizar de esta manera pero pueden hacerse usando el comando bc de la siguiente manera:

monstruosoft@monstruosoft-PC:~$ echo '164.78 * 52.93' 
164.78 * 52.93
monstruosoft@monstruosoft-PC:~$ echo '164.78 * 52.93' | bc
8721.80

Este tipo de instrucciones pueden ser útiles cuando necesitamos hacer operaciones aritméticas en la línea de comandos. Por ejemplo, si tenemos un video y hemos anotado el timestamp del cuadro inicial y final de una escena que queremos recortar, podemos hacerlo con FFmpeg pero los argumentos para recortar un video son el punto de inicio -ss, y la duración a partir de ese punto -t. En este caso podemos usar alguna de las formas descritas anteriormente para hacer operaciones aritméticas para calcular la duración, por ejemplo, de la siguiente manera:

monstruosoft@monstruosoft-PC:~$ INICIO=456.81
monstruosoft@monstruosoft-PC:~$ FIN=1776.39
monstruosoft@monstruosoft-PC:~$ DURACION=$(echo "$FIN - $INICIO" | bc)
monstruosoft@monstruosoft-PC:~$ echo $DURACION
1319.58
monstruosoft@monstruosoft-PC:~$ ffmpeg -i mi_video.avi -ss $INICIO -t $DURACION escena.mp4

Sumas, restas y multiplicaciones son sólo algunas de las operaciones que se pueden realizar con el comando bc. Para más detalles puedes revisar la documentación.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s