Comandos A-Z

40 Comando awk práctico y útil en Linux y BSD

40 Comando awk práctico y útil en Linux y BSD

AWK es un poderoso lenguaje de programación basado en datos que se remonta a los primeros días de Unix. Inicialmente se desarrolló para escribir programas de una sola línea, pero desde entonces se ha convertido en un lenguaje de programación completo. AWK recibe su nombre de las iniciales de sus autores: Aho, Weinberger y Kernighan. El comando awk en Linux y otros sistemas Unix invoca al intérprete que ejecuta scripts AWK. Existen varias implementaciones de awk en sistemas recientes como gawk (GNU awk), mawk (Minimal awk) y nawk (New awk), entre otros. Consulte los ejemplos a continuación si desea dominar awk.

Comprensión de los programas AWK


Los programas escritos en awk constan de reglas, que son simplemente un par de patrones y acciones. Los patrones se agrupan dentro de una llave , y la parte de acción se activa cada vez que awk encuentra textos que coinciden con el patrón. Aunque awk se desarrolló para escribir frases de una sola línea, los usuarios experimentados pueden escribir fácilmente scripts complejos con él.

Los programas AWK son muy útiles para el procesamiento de archivos a gran escala. Identifica campos de texto utilizando caracteres especiales y separadores. También ofrece construcciones de programación de alto nivel como matrices y bucles. Entonces, escribir programas robustos usando awk simple es muy factible.

Ejemplos prácticos del comando awk en Linux


Los administradores normalmente usan awk para la extracción de datos y la generación de informes junto con otros tipos de manipulaciones de archivos. A continuación, hemos discutido awk con más detalle. Siga los comandos cuidadosamente y pruébelos en su terminal para una comprensión completa.

1. Imprimir campos específicos desde la salida de texto


Los comandos de Linux más utilizados muestran su salida utilizando varios campos. Normalmente, usamos el comando cut de Linux para extraer un campo específico de dichos datos. Sin embargo, el siguiente comando le muestra cómo hacer esto usando el comando awk.

$ quién | awk 'imprimir $ 1'

Este comando mostrará solo el primer campo de la salida del comando who. Por lo tanto, simplemente obtendrá los nombres de usuario de todos los usuarios registrados actualmente. Aquí, $ 1 representa el primer campo. Necesitas usar $ N si desea extraer el campo N-ésimo.

2. Imprimir varios campos desde la salida de texto


El intérprete de awk nos permite imprimir cualquier número de campos que queramos. Los siguientes ejemplos nos muestran cómo extraer los dos primeros campos de la salida del comando who.

$ quién | awk 'imprimir $ 1, $ 2'

También puede controlar el orden de los campos de salida. El siguiente ejemplo muestra primero la segunda columna producida por el comando who y luego la primera columna en el segundo campo.

$ quién | awk 'imprimir $ 2, $ 1'

Simplemente omita los parámetros de campo ($ N) para mostrar todos los datos.

3. Usar declaraciones BEGIN


La declaración BEGIN permite a los usuarios imprimir información conocida en la salida. Suele utilizarse para formatear los datos de salida generados por awk. La sintaxis de esta declaración se muestra a continuación.

EMPEZAR Acciones ACCIÓN

Las acciones que forman la sección BEGIN siempre se activan. Luego awk lee las líneas restantes una por una y ve si es necesario hacer algo.

$ quién | awk 'BEGIN print "User \ tFrom" print $ 1, $ 2'

El comando anterior etiquetará los dos campos de salida extraídos de la salida del comando who.

4. Usar declaraciones END


También puede usar la instrucción END para asegurarse de que ciertas acciones siempre se realicen al final de su operación. Simplemente coloque la sección FIN después del conjunto principal de acciones.

$ quién | awk 'BEGIN print "User \ tFrom" print $ 1, $ 2 END print "--COMPLETED--"'

El comando anterior agregará la cadena dada al final de la salida.

5. Buscar usando patrones


Una gran parte del funcionamiento de awk implica la coincidencia de patrones y expresiones regulares. Como ya hemos comentado, awk busca patrones en cada línea de entrada y solo ejecuta la acción cuando se activa una coincidencia. Nuestras reglas anteriores consistían solo en acciones. A continuación, ilustramos los conceptos básicos de la coincidencia de patrones utilizando el comando awk en Linux.

$ quién | awk '/ mary / print'

Este comando verá si el usuario mary está actualmente conectado o no. Producirá la línea completa si se encuentra alguna coincidencia.

6. Extraer información de archivos


El comando awk funciona muy bien con archivos y se puede utilizar para tareas complejas de procesamiento de archivos. El siguiente comando ilustra cómo awk maneja los archivos.

$ awk '/ hello / print' / usr / share / dict / american-english

Este comando busca el patrón 'hola' en el archivo del diccionario inglés-americano. Está disponible en la mayoría de las distribuciones basadas en Linux. Por lo tanto, puede probar fácilmente programas awk en este archivo.

7. Leer secuencia de comandos AWK desde el archivo de origen


Aunque escribir programas de una sola línea es útil, también puede escribir programas grandes usando awk por completo. Querrá guardarlos y ejecutar su programa usando el archivo fuente.

$ awk -f archivo-script $ awk --file archivo-script

La -F o -expediente La opción nos permite especificar el archivo del programa. Sin embargo, no es necesario utilizar comillas (") dentro del archivo de script, ya que el shell de Linux no interpretará el código del programa de esta manera.

8. Establecer separador de campo de entrada


Un separador de campo es un delimitador que divide el registro de entrada. Podemos especificar fácilmente separadores de campo para awk usando el -F o -separador de campo opción. Consulte los siguientes comandos para ver cómo funciona esto.

$ echo "Este-es-un-ejemplo-simple" | awk -F - 'print $ 1' $ echo "Este-es-un-ejemplo-simple" | awk --field-separator - 'imprimir $ 1'

Funciona igual cuando se utilizan archivos de script en lugar del comando awk de una sola línea en Linux.

9. Imprimir información según la condición


Hemos discutido el comando de corte de Linux en una guía anterior. Ahora le mostraremos cómo extraer información usando awk solo cuando se cumplan ciertos criterios. Usaremos el mismo archivo de prueba que usamos en esa guía. Así que dirígete hacia allí y haz una copia del prueba.TXT expediente.

Prueba $ awk '$ 4> 50'.TXT

Este comando imprimirá todas las naciones de la prueba.txt, que tiene más de 50 millones de habitantes.

10. Imprimir información comparando expresiones regulares


El siguiente comando awk verifica si el tercer campo de cualquier línea contiene el patrón 'Lira' e imprime la línea completa si se encuentra una coincidencia. Estamos usando de nuevo la prueba.txt utilizado para ilustrar el comando de corte de Linux. Así que asegúrese de tener este archivo antes de continuar.

Prueba $ awk '$ 3 ~ / Lira /'.TXT

Puede optar por imprimir solo una parte específica de cualquier coincidencia si lo desea.

11. Cuente el número total de líneas en la entrada


El comando awk tiene muchas variables de propósito especial que nos permiten hacer muchas cosas avanzadas fácilmente. Una de esas variables es NR, que contiene el número de línea actual.

Prueba $ awk 'END print NR'.TXT

Este comando dará como resultado cuántas líneas hay en nuestra prueba.archivo txt. Primero itera sobre cada línea, y una vez que ha llegado a END, imprimirá el valor de NR, que contiene el número total de líneas en este caso.

12. Establecer separador de campo de salida


Anteriormente, hemos mostrado cómo seleccionar separadores de campo de entrada usando el -F o -separador de campo opción. El comando awk también nos permite especificar el separador del campo de salida. El siguiente ejemplo demuestra esto usando un ejemplo práctico.

$ fecha | awk 'OFS = "-" imprimir $ 2, $ 3, $ 6'

Este comando imprime la fecha actual usando el formato dd-mm-aa. Ejecute el programa de fecha sin awk para ver cómo se ve la salida predeterminada.

13. Usar la construcción If


Al igual que otros lenguajes de programación populares, awk también proporciona a los usuarios las construcciones if-else. La instrucción if en awk tiene la siguiente sintaxis.

if (expresión) primera_acción_segunda_acción

Las acciones correspondientes solo se realizan si la expresión condicional es verdadera. El siguiente ejemplo demuestra esto usando nuestro archivo de referencia prueba.TXT.

Prueba $ awk 'if ($ 4> 100) print'.TXT

No es necesario mantener la sangría estrictamente.

14. Usar construcciones If-Else


Puede construir escaleras if-else útiles utilizando la siguiente sintaxis. Son útiles cuando se diseñan scripts awk complejos que se ocupan de datos dinámicos.

if (expresión) first_action else second_action
$ awk 'if ($ 4> 100) imprimir; else print 'prueba.TXT

El comando anterior imprimirá el archivo de referencia completo ya que el cuarto campo no es mayor que 100 para cada línea.

15. Establecer el ancho del campo


A veces, los datos de entrada son bastante confusos y los usuarios pueden tener dificultades para visualizarlos en sus informes. Afortunadamente, awk proporciona una poderosa variable incorporada llamada FIELDWIDTHS que nos permite definir una lista de anchos separados por espacios en blanco.

$ echo 5675784464657 | awk 'BEGIN FIELDWIDTHS = "3 4 5" print $ 1, $ 2, $ 3'

Es muy útil cuando se analizan datos dispersos, ya que podemos controlar el ancho del campo de salida exactamente como queramos.

dieciséis. Establecer el separador de registros


El RS o Record Separator es otra variable incorporada que nos permite especificar cómo se separan los registros. Primero creemos un archivo que demuestre el funcionamiento de esta variable awk.

$ gato nuevo.txt Melinda James 23 New Hampshire (222) 466-1234 Daniel James 99 Phonenix Road (322) 677-3412
$ awk 'BEGIN FS = "\ n"; imprimir $ 1, $ 3' nuevo.TXT

Este comando analizará el documento y escupirá el nombre y la dirección de las dos personas.

17. Variables de entorno de impresión


El comando awk en Linux nos permite imprimir variables de entorno fácilmente usando la variable ENVIRON. El siguiente comando demuestra cómo usar esto para imprimir el contenido de la variable PATH.

$ awk 'BEGIN print ENVIRON ["PATH"]'

Puede imprimir el contenido de cualquier variable de entorno sustituyendo el argumento de la variable ENVIRON. El siguiente comando imprime el valor de la variable de entorno HOME.

$ awk 'BEGIN print ENVIRON ["HOME"]'

18. Omitir algunos campos de la salida


El comando awk nos permite omitir líneas específicas de nuestra salida. El siguiente comando demostrará esto usando nuestro archivo de referencia prueba.TXT.

$ awk -F ":" '$ 2 = ""; imprimir 'prueba.TXT

Este comando omitirá la segunda columna de nuestro archivo, que contiene el nombre de la capital de cada país. También puede omitir más de un campo, como se muestra en el siguiente comando.

$ awk -F ":" '$ 2 = ""; $ 3 = ""; imprimir' prueba.TXT

19. Eliminar líneas vacías


A veces, los datos pueden contener demasiadas líneas en blanco. Puede usar el comando awk para eliminar líneas vacías con bastante facilidad. Consulte el siguiente comando para ver cómo funciona esto en la práctica.

$ awk '/ ^ [\ t] * $ / next print' nuevo.TXT

Hemos eliminado todas las líneas vacías del archivo nuevo.txt usando una expresión regular simple y un awk incorporado llamado next.

20. Eliminar espacios en blanco finales


La salida de muchos comandos de Linux contiene espacios en blanco finales. Podemos usar el comando awk en Linux para eliminar espacios en blanco como espacios y tabulaciones. Consulte el siguiente comando para ver cómo abordar estos problemas con awk.

$ awk 'sub (/ [\ t] * $ /, ""); print' nuevo.prueba txt.TXT

Agregue algunos espacios en blanco finales a nuestros archivos de referencia y verifique si awk los eliminó con éxito o no. Hizo esto con éxito en mi máquina.

21. Verifique la cantidad de campos en cada línea


Podemos comprobar fácilmente cuántos campos hay en una línea usando un simple awk de una sola línea. Hay muchas formas de hacer esto, pero usaremos algunas de las variables integradas de awk para esta tarea. La variable NR nos da el número de línea y la variable NF proporciona el número de campos.

$ awk 'print NR, "->", NF' prueba.TXT

Ahora podemos confirmar cuántos campos hay por línea en nuestro prueba.TXT documento. Dado que cada línea de este archivo contiene 5 campos, estamos seguros de que el comando está funcionando como se esperaba.

22. Verificar nombre de archivo actual


La variable awk FILENAME se usa para verificar el nombre del archivo de entrada actual. Estamos demostrando cómo funciona esto usando un ejemplo simple. Sin embargo, puede ser útil en situaciones en las que el nombre del archivo no se conoce explícitamente o hay más de un archivo de entrada.

Prueba de $ awk 'print FILENAME'.txt $ awk 'print FILENAME' prueba.txt nuevo.TXT

Los comandos anteriores imprimen el nombre de archivo en el que trabaja awk cada vez que procesa una nueva línea de los archivos de entrada.

23. Verificar el número de registros procesados


El siguiente ejemplo mostrará cómo podemos verificar la cantidad de registros procesados ​​por el comando awk. Dado que una gran cantidad de administradores de sistemas Linux utilizan awk para generar informes, es muy útil para ellos.

$ awk 'imprimir "Registro de procesamiento -", NR; FIN imprimir "\ nRegistros totales procesados:", NR;' prueba.TXT

A menudo utilizo este fragmento de awk para tener una descripción clara de mis acciones. Puede modificarlo fácilmente para adaptarlo a nuevas ideas o acciones.

24. Imprima el número total de caracteres en un registro


El lenguaje awk proporciona una función útil llamada length () que nos dice cuántos caracteres hay en un registro. Es muy útil en varios escenarios. Eche un vistazo rápido al siguiente ejemplo para ver cómo funciona esto.

$ echo "Una cadena de texto aleatoria ..." | awk 'longitud de impresión ($ 0);  '
$ awk 'longitud de impresión ($ 0);  '/ etc / passwd

El comando anterior imprimirá el número total de caracteres presentes en cada línea de la cadena de entrada o archivo.

25. Imprima todas las líneas más largas que una longitud especificada


Podemos agregar algunos condicionales al comando anterior y hacer que solo imprima aquellas líneas que son mayores que una longitud predefinida. Es útil cuando ya tiene una idea sobre la longitud de un registro específico.

$ echo "Una cadena de texto aleatoria ..." | awk 'longitud ($ 0)> 10'
$ awk 'longitud ($ 0)> 5;  '/ etc / passwd

Puede incluir más opciones y / o argumentos para modificar el comando según sus requisitos.

26. Imprima el número de líneas, caracteres y palabras


El siguiente comando awk en Linux imprime el número de líneas, caracteres y palabras en una entrada determinada. Utiliza la variable NR, así como algunos conceptos básicos de aritmética para realizar esta operación.

$ echo "Esta es una línea de entrada ..." | awk 'w + = NF; c + = longitud + 1 FIN imprimir NR, w, c '

Muestra que hay 1 línea, 5 palabras y exactamente 24 caracteres presentes en la cadena de entrada.

27. Calcular la frecuencia de las palabras


Podemos combinar matrices asociativas y el bucle for en awk para calcular la frecuencia de palabras de un documento. El siguiente comando puede parecer un poco complejo, pero es bastante simple una vez que comprende claramente las construcciones básicas.

$ awk 'COMIENZO FS = "[^ a-zA-Z] +" para (i = 1; i<=NF; i++) words[tolower($i)]++  END  for (i in words) print i, words[i] ' test.txt

Si tiene problemas con el fragmento de una sola línea, copie el siguiente código en un archivo nuevo y ejecútelo usando la fuente.

$ gato> frecuencia.awk COMIENZO FS = "[^ a-zA-Z] +" para (i = 1; i<=NF; i++) words[tolower($i)]++  END  for (i in words) print i, words[i] 

Luego ejecútelo usando el -F opción.

$ awk -f frecuencia.prueba de awk.TXT

28. Cambiar el nombre de los archivos usando AWK


El comando awk se puede utilizar para cambiar el nombre de todos los archivos que coincidan con ciertos criterios. El siguiente comando ilustra cómo usar awk para cambiar el nombre de todos .Archivos MP3 en un directorio para .archivos mp3.

$ touch a, b, c, d, e.MP3 $ ls *.MP3 | awk 'printf ("mv \"% s \ ""\""% s \ ""\ n"", $ 0, tolower ($ 0))' $ ls *.MP3 | awk 'printf (""mv \""% s \ ""\""% s \ ""\ n"", $ 0, tolower ($ 0))' | sh

Primero, creamos algunos archivos de demostración con .Extensión MP3. El segundo comando muestra al usuario lo que sucede cuando el cambio de nombre es exitoso. Finalmente, el último comando realiza la operación de cambio de nombre usando el comando mv en Linux.

29. Imprimir la raíz cuadrada de un número


AWK ofrece varias funciones integradas para manipular números. Uno de ellos es la función sqrt (). Es una función similar a C que devuelve la raíz cuadrada de un número dado. Eche un vistazo rápido al siguiente ejemplo para ver cómo funciona esto en general.

$ awk 'COMIENZA print sqrt (36)
        
Tutorial de Shadow of the Tomb Raider para Linux
Shadow of the Tomb Raider es la duodécima incorporación a la serie Tomb Raider, una franquicia de juegos de acción y aventuras creada por Eidos Montre...
Cómo impulsar FPS en Linux?
FPS significa Cuadros por segundo. La tarea de FPS es medir la velocidad de fotogramas en reproducciones de video o actuaciones de juegos. En palabras...
Los mejores juegos de Oculus App Lab
Si es propietario de un visor Oculus, debe estar informado sobre la descarga lateral. Sideloading es el proceso de instalación de contenido que no es ...