GNU/Linux >> Tutoriales Linux >  >> Linux

Comando AWK en Linux con ejemplos

Introducción

El awk command es una herramienta y lenguaje de programación de Linux que permite a los usuarios procesar y manipular datos y producir informes formateados. La herramienta admite varias operaciones para el procesamiento de texto avanzado y facilita la expresión de selecciones de datos complejos.

En este tutorial, aprenderá lo que awk qué hace el comando y cómo usarlo.

Requisitos previos

  • Un sistema que ejecuta Linux.
  • Acceso a una ventana de terminal.

Sintaxis del comando AWK

La sintaxis para awk el comando es:

awk [options] 'selection_criteria {action}' input-file > output-file

Las opciones disponibles son:

¿Cómo funciona el comando AWK?

El awk El propósito principal del comando es hacer que la recuperación de información y la manipulación de texto fácil de realizar en Linux. El comando funciona escaneando un conjunto de líneas de entrada en orden y busca líneas que coincidan con los patrones especificados por el usuario.

Para cada patrón, los usuarios pueden especificar una acción para realizar en cada línea que coincida con el patrón especificado. Por lo tanto, usando awk , los usuarios pueden procesar fácilmente archivos de registro complejos y generar un informe legible.

Operaciones AWK

awk permite a los usuarios realizar varias operaciones en un archivo de entrada o texto. Algunas de las operaciones disponibles son:

  • Escanear un archivo línea por línea.
  • Dividir la línea/archivo de entrada en campos.
  • Compare la línea de entrada o los campos con los patrones especificados.
  • Realizar varias acciones en las líneas coincidentes.
  • Dar formato a las líneas de salida.
  • Realizar operaciones aritméticas y de cadenas.
  • Usar flujo de control y bucles en la salida.
  • Transforme los archivos y datos de acuerdo con una estructura específica.
  • Generar informes formateados.

Declaraciones AWK

El comando proporciona instrucciones básicas de flujo de control (if-else , while , for , break ) y también permite a los usuarios agrupar declaraciones usando llaves {} .

  • if-else

El if-else funciona evaluando la condición especificada entre paréntesis y, si la condición es verdadera, la declaración que sigue a if se ejecuta la sentencia. El else parte es opcional.

Por ejemplo:

awk -F ',' '{if($2==$3){print $1","$2","$3} else {print "No Duplicates"}}' answers.txt

El resultado muestra las líneas en las que existen duplicados y los estados No hay duplicados si no hay respuestas duplicadas en la línea.

  • mientras

El while La instrucción ejecuta repetidamente una declaración de destino siempre que la condición especificada sea verdadera. Eso significa que funciona como el del lenguaje de programación C. Si la condición es verdadera, se ejecuta el cuerpo del bucle. Si la condición es falsa, awk continúa con la ejecución.

Por ejemplo, la siguiente declaración instruye a awk para imprimir todos los campos de entrada uno por línea:

awk '{i=0; while(i<=NF) { print i ":"$i; i++;}}' employees.txt
  • para

El for La declaración también funciona como la de C, lo que permite a los usuarios crear un bucle que debe ejecutarse una cantidad específica de veces.

Por ejemplo:

awk 'BEGIN{for(i=1; i<=10; i++) print "The square of", i, "is", i*i;}'

La declaración anterior aumenta el valor de i por uno hasta llegar a diez y calcula el cuadrado de i cada vez.

  • descanso

El break instrucción sale inmediatamente de un while adjunto o for . Para comenzar la siguiente iteración, use continue declaración.

El next declaración instruye a awk para saltar al siguiente registro y comenzar a buscar patrones desde la parte superior. La exit declaración instruye a awk que la entrada ha terminado.

El siguiente es un ejemplo de break declaración:

awk 'BEGIN{x=1; while(1) {print "Example"; if ( x==5 ) break; x++; }}'

El comando anterior rompe el ciclo después de 5 iteraciones.

Patrones AWK

Insertar un patrón delante de una acción en awk actúa como un selector . El selector determina si realizar una acción o no. Las siguientes expresiones pueden servir como patrones:

  • Expresiones regulares.
  • Expresiones relacionales aritméticas.
  • Expresiones con valores de cadena.
  • Combinaciones booleanas arbitrarias de las expresiones anteriores.

Las siguientes secciones explican las expresiones mencionadas anteriormente y cómo usarlas.

Patrones de expresiones regulares

Los patrones de expresiones regulares son la forma más simple de expresiones que contienen una cadena de caracteres entre barras. Puede ser una secuencia de letras, números o una combinación de ambos.

En el siguiente ejemplo, el programa genera todas las líneas que comienzan con "A". Si la cadena especificada es parte de una palabra más grande, también se imprime.

awk '$1 ~ /^A/ {print $0}' employees.txt

Patrones de expresiones relacionales

Otro tipo de awk Los patrones son patrones de expresión relacional. Los patrones de expresión relacional implican el uso de cualquiera de los siguientes operadores relacionales:<, <=, ==, !=,>= y > .

El siguiente es un ejemplo de un awk expresión relacional:

awk 'BEGIN { a = 10; b = 10; if (a == b) print "a == b" }'

Patrones de rango

Un patrón de rango es un patrón que consta de dos patrones separados por una coma. Los patrones de rango realizan la acción especificada para cada línea entre la ocurrencia del patrón uno y el patrón dos.

Por ejemplo:

awk '/clerk/, /manager/ {print $1, $2}' employees.txt

El patrón anterior instruye a awk para imprimir todas las líneas de la entrada que contengan las palabras clave "empleado" y "gerente".

Patrones de expresiones especiales

Los patrones de expresiones especiales incluyen BEGIN y END que denotan la inicialización y el final del programa. El BEGIN el patrón coincide con el comienzo de la entrada, antes de que se procese el primer registro. El END el patrón coincide con el final de la entrada, después de que se haya procesado el último registro.

Por ejemplo, puede instruir a awk para mostrar un mensaje al principio y al final del proceso:

awk 'BEGIN { print "List of debtors:" }; {print $1, $2}; END {print "End of the debtor list"}' debtors.txt

Combinar patrones

El awk El comando permite a los usuarios combinar dos o más patrones utilizando operadores lógicos. Los patrones combinados pueden ser cualquier combinación booleana de patrones. Los operadores lógicos para combinar patrones son:

  • || (o)
  • && (y)
  • ! (no)

Por ejemplo:

awk '$3 > 10 && $4 < 20 {print $1, $2}' employees.txt 

La salida imprime el primer y segundo campo de aquellos registros cuyo tercer campo es mayor que diez y el cuarto campo es menor que 20.

Variables AWK

El awk El comando tiene variables de campo incorporadas, que dividen el archivo de entrada en partes separadas llamadas campos . El awk asigna las siguientes variables a cada campo de datos:

  • $0 . Se utiliza para especificar toda la línea.
  • $1 . Especifica el primer campo.
  • $2 . Especifica el segundo campo.
  • etc.

Otros awk incorporados disponibles las variables son:

  • NR . Cuenta el número de registros de entrada (generalmente líneas). El awk El comando ejecuta las declaraciones de patrón/acción una vez para cada registro en un archivo.

Por ejemplo:

awk '{print NR,$0}' employees.txt

El comando muestra el número de línea en la salida.

  • NF . Cuenta el número de campos en el registro de entrada actual y muestra el último campo del archivo.

Por ejemplo:

awk '{print $NF}' employees.txt
  • FS . Contiene el carácter utilizado para dividir campos en la línea de entrada. El separador predeterminado es espacio, pero puede usar FS para reasignar el separador a otro carácter (normalmente en BEGIN ).

Por ejemplo, puede hacer que etc/passwd archivo (lista de usuarios) más legible cambiando el separador de dos puntos (: ) a un guión (/ ) e imprima también el separador de campo:

awk -FS 'BEGIN{FS=":"; OFS="-"} {print $0}' /etc/passwd
  • RS . Almacena el carácter separador de registro actual. La línea de entrada predeterminada es el registro de entrada, lo que hace que una nueva línea sea el separador de registros predeterminado. El comando es útil si la entrada es un archivo separado por comas (CSV).

Por ejemplo:

awk 'BEGIN {FS="-"; RS=","; OFS=" owes Rs. "} {print $1,$2}' debtors.txt
  • OFS . Almacena el separador de campos de salida, que separa los campos cuando se imprimen. El separador predeterminado es un espacio en blanco. Siempre que el archivo impreso tenga varios parámetros separados por comas, el OFS el valor se imprime entre cada parámetro.

Por ejemplo:

awk 'OFS=" works as " {print $1,$3}' employees.txt

Acciones AWK

El awk La herramienta sigue reglas que contienen pares patrón-acción. Las acciones consisten en declaraciones encerradas entre llaves {} que contienen expresiones, sentencias de control, sentencias compuestas, sentencias de entrada y salida y sentencias de eliminación. Esas declaraciones se describen en las secciones anteriores.

Crea un awk script usando la siguiente sintaxis:

awk '{action}' 

Por ejemplo:

awk '{print "How to use the awk command"}'

Este comando simple instruye a awk para imprimir la cadena especificada cada vez que ejecuta el comando. Terminar el programa usando Ctrl+D .

Cómo usar el comando AWK - Ejemplos

Además de manipular datos y generar resultados formateados, awk tiene otros usos, ya que es un lenguaje de secuencias de comandos y no solo un comando de procesamiento de texto. Esta sección explica casos de uso alternativos para awk .

  • Cálculos . El awk comando le permite realizar cálculos aritméticos. Por ejemplo:
df | awk '/\/dev\/loop/ {print $1"\t"$2 + $3}'

En este ejemplo, conectamos el comando df y usamos la información generada en el informe para calcular la memoria total disponible y utilizada por los sistemas de archivos montados que contienen solo /dev y /bucle en el nombre.

El informe producido muestra la suma de la memoria del /dev y /bucle sistemas de archivos en las columnas dos y tres en el df salida.

  • Filtrado . El awk El comando le permite filtrar la salida limitando la longitud de las líneas. Por ejemplo:
awk 'length($0) > 8' /etc/shells

En este ejemplo, ejecutamos /etc/shells archivo del sistema a través de awk y filtró la salida para contener solo las líneas que contienen más de 8 caracteres.

  • Supervisión . Compruebe si un determinado proceso se está ejecutando en Linux conectando el ps dominio. Por ejemplo:
ps -ef | awk '{ if($NF == "clipboard") print $0}'

La salida imprime una lista de todos los procesos que se ejecutan en su máquina con el último campo que coincide con el patrón especificado.

  • Contar . Puedes usar awk para contar el número de caracteres en una línea y obtener el número impreso en el resultado. Por ejemplo:
awk '{ print "The number of characters in line", NR,"=" length($0) }' employees.txt

Linux
  1. Comando wc Linux con ejemplos

  2. Comando de clasificación de Linux con ejemplos

  3. Comando Linux Tee con ejemplos

  4. Comando de cabeza de Linux con ejemplos

  5. Comando JQ en Linux con ejemplos

Comando de vigilancia de Linux con ejemplos

Comando de espera en Linux con ejemplos

Comando de exportación de Linux con ejemplos

Comando de reinicio en Linux con ejemplos

Comando awk de Linux con 10 ejemplos

Comando IP de Linux con ejemplos

    Opción Descripción
    -F [separator] Se utiliza para especificar un separador de archivos. El separador predeterminado es un espacio en blanco.
    -f [filename] Se utiliza para especificar el archivo que contiene el awk texto. Lee el awk fuente del programa del archivo especificado, en lugar del primer argumento de la línea de comandos.
    -v Se utiliza para asignar una variable.