En un archivo con un número diferente de columnas delimitadas por espacio '', Cómo contar la suma de las columnas. Un ejemplo mostraría la necesidad:
File A:
1 2
2 3
4 5 6
1 1 1 5
Entonces la salida sería:
- para la columna 1 (1 + 2 + 4 + 1) = 8
- para la columna 2 es 11
- para la columna 3 es 7
- para la columna 4 es 5
command-line
scripts
Maythux
fuente
fuente
Úselo
numsum
para esa tarea y separe el procesamiento de datos y envíe los resultados.Instalar
num-utils
, necesitamosnumsum
Y comienza con
Ejemplo
o con su formato deseado:
desde
man numsum
ejemplos de
man numsum
fuente
fuente
(( col1 += a ))
, etc. Además,echo "..."
es más seguro, así comowhile IFS= read -r ...
echo
es seguro para usarse de esa manera para hacer eco de números,$IFS
valores predeterminados en espacios en blanco y se espera que sean números, por lo que no es necesario lidiar con barras diagonales inversas. El único inconveniente de esta respuesta es la necesidad de conocer el número de columnas antes de la ejecución.echo "[...]"
para imprimir correctamente lo que no desea generar no tiene sentido.echo $var
ywhile read a b c
, funciona aquí. Sin embargo, se acostumbrará a escribirlo de manera débil y algún día obtendrá errores extraños mientras procesa un archivo más complejo. Entonces notarás que las variables de cotización y el usowhile IFS= read -r ...
fueron más seguras y dirán "¡oh, sí, fedorqui tenía razón, espero tenerlo cerca para abrazarlo y mostrar gratitud!".A juzgar por los comentarios a su propia respuesta, solo desea la suma de una columna a la vez. Si es así, aquí hay una manera no awk de hacerlo:
donde reemplazaría el
3
con el número de columna que le interesa.fuente
Aquí hay un enfoque de guión Perl de una línea. Esto se basa en el uso de
-a
flag que permite la división automática de la línea actualmente leída con-n
flag en array@F
. Todo lo que tenemos que hacer es iterar sobre esos elementos y agregarlos a su índice respectivo en la$sum
matriz, por lo que efectivamente cada elemento de la matriz es la suma de cada columna respectiva. Finalmente, imprimimos el resultado dentro delEND
bloque de código.Alternativamente, aquí hay un enfoque completo de script Perl. Se basa en dividir cada línea en una matriz e iterar sobre cada elemento de esa matriz agregando cada número a su posición respectiva en la
@sums
matriz. El script imprime cada línea, luego produce un informe para cada columna. La impresión de cada línea se puede eliminar agregando#
antesprintf("%s",$line);
El uso es simple
chmod +x ./sum_columns.pl && ./sum_columns.pl input.txt
. Por ejemplo:fuente
Una solución simple:
Reemplace i con el número de columna, por ejemplo column1:
la salida es:
fuente