Cada línea contiene texto y números en una columna. Necesito calcular la suma de los números en cada fila. ¿Cómo puedo hacer eso? Gracias
example.log contiene:
time=31sec
time=192sec
time=18sec
time=543sec
La respuesta debería ser 784
Cada línea contiene texto y números en una columna. Necesito calcular la suma de los números en cada fila. ¿Cómo puedo hacer eso? Gracias
example.log contiene:
time=31sec
time=192sec
time=18sec
time=543sec
La respuesta debería ser 784
Respuestas:
Si es su opción de
grep
soporte-o
, puede intentar:POSIXY:
fuente
Con una versión más nueva (4.x) de GNU
awk
:Con otro
awk
intento:fuente
s+0
en caso de ques
esté vacío, se imprimirá en0
lugar de estar vacío.s
puede estar vacío; si los datos de entrada no contienen líneas (es decir, si no hay ninguna entrada ). En ese caso hay dos comportamientos posibles; 1) sin entrada => sin salida, o 2) siempre genera algo, si solo es 0. Ambas son opciones sensibles según el contexto de la aplicación. La+0
opción de direccionamiento 2). Para abordar la opción 1) preferiría escribirEND {if(s) print s}
. - Por lo tanto, no tiene sentido asumir ninguna de las opciones (para este caso de esquina sin datos) hasta que la pregunta lo especifique.fuente
time=1.4e5sec
Otro GNU
awk
:A
perl
uno:Un POSIX:
fuente
fuente
sed
:awk --field-separator = '{ sum+=$2 } END { print sum}' data.dat
-F'='
lugar de--field-separator =
man awk
únicos-F fs
--field-separator fs
-F'='
o-F '='
hay 2 formas de hacer el-F fs
(fs es "=" en su caso). Agregué las comillas simples para asegurar que fs sea visto e interpretado correctamente por awk, no el shell (útil si la fs es ';' por ejemplo)Puedes probar esto:
fuente
Todos han publicado
awk
respuestas increíbles , que me gustan mucho.Una variación para reemplazar @cuonglm
grep
consed
:sed
tiras todo excepto los números.paste -sd+ -
comando une todas las líneas como una sola línea.bc
evalúa la expresiónfuente
Deberías usar una calculadora.
Con sus cuatro líneas que imprime:
Y más simplemente:
... que imprime ...
Si lo que buscas es velocidad, entonces
dc
es lo que quieres. Tradicionalmente erabc
su compilador, y todavía lo es para muchos sistemas.fuente
dc
tan cerca como puedo ver. ¿De qué estás hablando?perl
conjunto de herramientas estándar de Unix, realmente no tiene mucho sentido si utiliza herramientas GNU compiladas en una cadena de herramientas GNU. Toda la hinchazón que puede afectar negativamente el rendimiento de Perl también se encuentra en todas esas utilidades GNU compiladas por GNU. Triste pero cierto. Necesita un conjunto de herramientas real, simple y simple para juzgar con precisión la diferencia. Como, por ejemplo, un conjunto de herramientas de reliquias estáticamente vinculado a las librerías musl, de esa manera puede comparar el paradigma de una herramienta / un trabajo con el de una herramienta para gobernarlos a todos.A través de python3,
fuente
re.findall
devuelve una lista de cadenas, esto no va a funcionarsum(int(e) for e in l)
sea más pitónico.Solución de bash pura (Bash 3+):
Version corta:
fuente
PS4='$((x+=${time%s*}))' time=0 x=0 sh -x <infile