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.