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. |
¿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 {}
.
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.
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
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.
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:
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