Usando awk para sumar los valores de una columna, basados ​​en los valores de otra columna

Pregunta:

Estoy tratando de sumar ciertos números en una columna usando awk . Me gustaría sumar solo la columna 3 de los "herreros" para obtener un total de 212. Puedo sumar toda la columna usando awk pero no solo los "herreros". Yo tengo:

awk 'BEGIN {FS = "|"} ; {sum+=$3} END {print sum}' filename.txt

También estoy usando masilla. Gracias por cualquier ayuda.

smiths|Login|2
olivert|Login|10
denniss|Payroll|100
smiths|Time|200
smiths|Logout|10

Respuesta:

awk -F '|' '$1 ~ /smiths/ {sum += $3} END {print sum}' inputfilename
  • La bandera -F establece el separador de campo; Lo pongo entre comillas simples porque es un carácter especial de shell.
  • Entonces $1 ~ /smiths/ aplica el siguiente {bloque de código} solo a las líneas donde el primer campo coincide con la expresión regular /smiths/ .
  • El resto es el mismo que tu código.

Tenga en cuenta que, dado que en realidad no está usando una expresión regular aquí, solo un valor específico, podría usar con la misma facilidad:

awk -F '|' '$1 == "smiths" {sum += $3} END {print sum}' inputfilename

Que verifica la igualdad de cadenas. Esto es equivalente a usar la expresión regular /^smiths$/ , como se menciona en otra respuesta, que incluye el ancla ^ para que solo coincida con el inicio de la cadena (el inicio del campo 1) y el ancla $ para solo coincidir con el final de la cuerda. No estoy seguro de qué tan familiarizado está con las expresiones regulares. Son muy poderosos, pero en este caso podría usar una verificación de igualdad de cadenas con la misma facilidad.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım