script - comando bash para sumar e imprimir cada elemento de una columna e imprimir una nueva columna
scripts linux ejercicios resueltos (4)
Aquí está el comando para lograr lo que desea:
awk ''{$(NF+1)=$NF+$2}1'' <filename
¿Qué comando debería usar para sumar los valores de dos columnas específicas? Por ejemplo, tengo el archivo:
1 4 5 1
2 3 5 2
7 8 6 3
Y quiero sumar la segunda y la última columna para obtener el siguiente resultado
1 4 5 1 5
2 3 5 2 5
7 8 6 3 11
shoud yo uso awk y bc? He encontrado muchos ejemplos para sumar toda la columna ...
Para cálculos simples awk
es el camino a seguir. En situaciones más complicadas, es posible que desee paralelizar la operación, puede hacerlo con GNU paralelo y una calculadora de su elección.
Con bash
:
<infile parallel --colsep '' +'' echo ''{}'' ''$(( {2} + {4} ))
Con bash
y bc
:
<infile parallel --colsep '' +'' echo ''{}'' ''$(bc <<< "{2} + {4}")''
Tenga en cuenta que la versión actual de parallel
no tiene una manera fácil de referirse al último elemento de la entrada, sin embargo, ahora hay un parche en la rama de desarrollo que permite la indexación negativa de los elementos, es decir, usted podría usar {-1}
lugar de {4}
.
Tratar:
awk ''{print $0, $2 + $NF }'' input_file
Ya que etiquetó la pregunta bash
(¡ awk
es la herramienta más adecuada para usar!)
#!/bin/bash
while read -a ARRAY
do
echo ${ARRAY[@]} $((${ARRAY[1]}+${ARRAY[3]}))
done < input.txt
salida:
$ ./sum.sh
1 4 5 1 5
2 3 5 2 5
7 8 6 3 11