Comandos de Linux y habilidades de Shell
awk: Cuando las columnas se convierten en programas
awk es lo que buscas cuando las columnas se convierten en la unidad de trabajo: registros de acceso de nginx, /etc/passwd, salida de df, cualquier cosa que viva en los campos. Es un lenguaje completo (variables, matrices, aritmética, reglas de acción de patrones) que lleva ropa de una sola línea, que es exactamente el disfraz adecuado para la investigación forense de registros. El límite honesto: cualquier cosa que awk haga cómodamente es una sola línea, y cualquier cosa que necesite una página de bloques es un script de Python que aún no se ha admitido.
Puntos clave
- La división de campos es el truco principal: awk -F: '$3 >= 1000 {print $1}' /etc/passwd enumera los usuarios reales, y -F'[,|]' maneja delimitadores de varios caracteres cuando el corte ya se ha rendido.
- Contar con matrices asociativas: awk '{count[$1]++} END {for (c in count) print count[c], c}' /var/log/secure convierte cualquier registro en una tabla de frecuencia en una línea.
- NR y NF responden preguntas sobre archivos: 'NR==1' es la línea de encabezado, '{print NF}' cuenta columnas por fila y al comparar NR con los valores guardados de otro archivo se encuentran duplicados y espacios en blanco.
- Coincidir más extraer es el pan de cada día: awk '/ 500 / {print $7, $9}' access.log extrae páginas de error con URL y OFS le permite reimprimir $0 después de editar un solo campo sin tener que volver a escribir la línea usted mismo.
- Los bloques BEGIN y END son donde reside el trabajo agregado: BEGIN establece separadores, las reglas intermedias se ejecutan por línea, END imprime los totales; tres bloques se leen bien, cinco es un guión disfrazado.
- Las comillas son el verdadero enemigo de las frases ingeniosas del shell: coloque comillas simples en el programa, comillas dobles literales dentro de él y recuerde que $7 dentro de una cadena de shell entre comillas dobles nunca llega a awk en absoluto.
- El trabajo numérico obtiene LC_ALL=C: las comas locales en números y las intercalaciones impares hacen que las comparaciones y las clasificaciones se hagan de lado, y fijar la ubicación es una línea que ahorra una tarde.
- Conozca el límite: las comas entre comillas dentro de CSV, JSON anidado o formatos multilínea con estado van a Python; awk es un bisturí y sigue siéndolo.
Nota de campo
Una frase ingeniosa que sumaba columnas de dólares de un registro con comas locales produjo números que nadie cuestionó hasta que contabilidad abrió el informe. LC_ALL=C se mudó a nuestra biblioteca de alias esa semana y se quedó.
Preguntas frecuentes
¿awk o cortado para trabajo en columna?
corte para un separador fijo y una lista de columnas simple; awk en el momento en que aparecen condiciones, expresiones regulares, aritmética o agregados, momento en el que el corte está fuera de su profundidad de todos modos.
¿Cómo sumo o promedio una columna?
Agregado en FINAL: awk '{s += $5} END {print s, s/NR}' agrega y promedia el campo cinco entre líneas; elimine primero los separadores de miles si una configuración regional pone comas en los números.
¿Por qué mi frase awk se comporta de manera diferente en macOS?
macOS incluye un awk POSIX sin extensiones GNU como -i inplace o gensub; Los scripts que se ejecutan en Linux pueden fallar silenciosamente allí, así que mantenga frases ingeniosas en forma de POSIX o llévelo con usted.
¿Puede awk analizar JSON?
No tiene sentido: JSON no tiene una estructura de columnas que awk entiende y los hacks de expresiones regulares se rompen en objetos anidados. Utilice jq, que es la forma de awk para JSON, o el módulo json de Python cuando el trabajo crezca.
Cómo ayuda Kinetikatech con comandos de linux y habilidades de shell
Usted no debería tener que volverse experto en comandos de linux y habilidades de shell: Los comandos y hábitos de secuencias de comandos que deciden si un administrador opera un servidor o lucha contra él: buscar, transformar, transferir y supervisar texto y procesos con las herramientas que se encuentran en cada instalación básica. Exactamente para eso existe Seguridad de servidores Linux y Gestión de servidores: configuración, blindaje, monitoreo y un ingeniero de guardia día y noche.