Introducción
El gawk
comando es la versión GNU de awk. Gawk es una poderosa herramienta de procesamiento de texto y manipulación de datos con muchas funciones y usos prácticos.
Esta guía le enseñará cómo usar Linux gawk
comando con ejemplos.
Requisitos previos
- Un sistema que ejecuta Linux.
- Acceso a la terminal.
- Un archivo de texto. Este tutorial utiliza el archivo personas como ejemplo.
Sintaxis del comando gawk Linux
El gawk
básico la sintaxis se ve así:
gawk [options] [actions/filters] input_file
El comando no se puede ejecutar sin ningún argumento. Las opciones no son obligatorias, pero para gawk
para producir resultados, se debe asignar al menos una acción. Las acciones y los filtros son diferentes subcomandos y criterios de selección que habilitan gawk
para manipular datos del archivo de entrada.
Nota :Encierre opciones y acciones entre comillas simples.
Opciones de observación
El gawk
command es una herramienta versátil gracias a sus numerosos argumentos. Con gawk
siendo la implementación GNU de awk
, opciones largas de estilo GNU están disponibles. Cada opción larga tiene su correspondiente corta.
Las opciones comunes se presentan a continuación:
Opción | Descripción |
---|---|
-f program-file , --file program-file | Lee comandos de un archivo, que sirve como script, en lugar del primer argumento en la terminal. |
-F fs , --field-separator fs | Utiliza la variable predefinida fs como separador de campo de entrada. |
-v var=val , --assign var=val | Asigna un valor a la variable antes de ejecutar un script. |
-b , --characters-as-bytes | Trata todos los datos como caracteres de un solo byte. |
-c , --traditional | Ejecuta gawk en modo de compatibilidad. |
-C , --copyright | Muestra el mensaje de Copyright de GNU. |
-d[file] , --dump-variables[=file] | Muestra una lista de variables, sus tipos y valores. |
-e program-text , --source program-text | Permite la combinación de funciones de biblioteca y código fuente. |
-E file , --exec file | Desactiva las asignaciones de variables de terminal. |
-L [value] , --lint[=value] | Imprime mensajes de advertencia sobre el código no transferible a otras implementaciones de AWK. |
-S , --sandbox | Ejecuta gawk en modo sandbox. |
Variables integradas de Gawk
El gawk
El comando ofrece varias variables integradas que se utilizan para almacenar y agregar valor al comando. Las variables se manipulan desde la terminal y solo afectan al programa cuando un usuario les asigna un valor. Algunas gawk
importantes Las variables integradas son:
Variable | Descripción |
---|---|
ARGC | Muestra el número de argumentos de terminal. |
ARGIND | Muestra el índice de archivos ARGV. |
ARGV | Presenta una matriz de argumentos de terminal. |
ERRNO | Contiene cadenas que describen un error del sistema. |
FIELDWIDTHS | Muestra una lista de anchos de campo separados por espacios en blanco. |
FILENAME | Imprime el nombre del archivo de entrada. |
FNR | Muestra el número de registro de entrada. |
FS | Representa el separador de campo de entrada. |
IGNORECASE | Activa o desactiva la búsqueda entre mayúsculas y minúsculas. |
NF | Imprime el recuento de campos del archivo de entrada. |
NR | Imprime el número de líneas del archivo actual. |
OFS | Muestra el separador de campo de salida. |
ORS | Muestra el separador de registros de salida. |
RS | Imprime el separador de registros de entrada. |
RSTART | Representa el índice del primer carácter coincidente. |
RLENGTH | Representa la longitud de cadena coincidente. |
Ejemplos boquiabiertos
El uso de gawk
Las funciones de coincidencia de patrones y procesamiento del lenguaje son amplias. Este artículo tiene como objetivo proporcionar ejemplos prácticos a través de los cuales los usuarios aprenden a usar la utilidad gawk.
Importante: El gawk
El comando distingue entre mayúsculas y minúsculas. Usa el IGNORECASE
variable para ignorar mayúsculas y minúsculas.
Imprimir archivos
Por defecto, gawk
con un print
El argumento muestra cada línea del archivo especificado. Por ejemplo, ejecutar el comando cat en personas archivo de texto imprime lo siguiente:
El gawk
comando muestra el mismo resultado:
gawk '{print}' people
Imprimir una columna
En los archivos de texto, los espacios se suelen utilizar como delimitadores de columnas. Las personas El archivo consta de cuatro columnas:
- Números ordinales.
- Nombres.
- Apellidos.
- Año de nacimiento.
Usa gawk
para mostrar solo una columna específica en la terminal. Por ejemplo:
gawk '{print $2}' people
El comando imprime solo la segunda columna. Para imprimir varias columnas, como la columna uno (números ordinales) y la columna dos (nombres), ejecute:
gawk '{print $1, $2}' people
El gawk
El comando también funciona sin la coma entre $1
y $2
. Sin embargo, no hay espacios entre columnas en la salida:
gawk '{print $1 $2}' people
Columnas de filtro
El gawk
El comando ofrece opciones de filtrado adicionales. Por ejemplo, imprima líneas que contengan la letra mayúscula O con:
gawk '/O/ {print}' people
Para mostrar solo líneas que contengan letras O o A , usar tubería:
gawk '/O|A/ {print}' people
El comando imprime cualquier línea que incluya una palabra con mayúscula O o A . Por otro lado, utilice lógica Y (&&
) para mostrar líneas que incluyen tanto O y el año 1995 :
gawk '/O/ && /1995/' people
Los filtros también funcionan con números. Por ejemplo, muestra solo personas nacidas en la década de 1990 con:
gawk '/199*/ {print}' people
La salida muestra solo líneas en las que la cuarta columna incluye el valor 199 .
Personalice aún más la salida combinando las opciones mencionadas anteriormente. Por ejemplo, escriba solo el nombre y apellido de las personas nacidas en 1995 o 2003 con:
gawk '/1995|2003/ {print $2, $3}' people
El comando imprime las columnas dos y tres como se indica en el {print $2, $3}
parte. La salida solo muestra líneas que contienen los números 1995 y 2003 , aunque las columnas que contienen esos números estén ocultas.
El gawk
El comando también permite a los usuarios imprimir todo excepto las líneas que contienen la cadena especificada con el NO lógico (!
). Por ejemplo, omita las líneas que contengan la cadena 19 en la salida:
gawk '!/19/' people
Añadir números de línea
Las personas El archivo incluye números de línea en la primera columna. En caso de que los usuarios estén trabajando en un archivo sin números de línea, gawk
presenta opciones para agregarlos.
Por ejemplo, los humanos el archivo no incluye ningún número ordinal:
Para agregar números de línea, ejecute gawk
con FNR
y next
:
gawk '{ print FNR, $0; next}' humans
El comando agrega un número de línea antes de cada línea. El mismo resultado se logra con el NR
variables:
gawk '{print NR, $0}' mobile.txt
Buscar número de líneas
Para contar el número total de líneas en el archivo, use el END
declaración y el NR
variable con gawk
:
gawk 'END { print NR }' people
El comando lee cada línea. Una vez gawk
alcanza END
, imprime el valor de NR
- que contiene el número total de líneas. Ejecutando el mismo comando sin el END
declaración imprime sólo el valor de NR
- el número de líneas:
Filtrar líneas según la longitud
Use la siguiente opción de comando para imprimir solo líneas de más de 20 caracteres:
gawk 'length>20' people
También funciona con múltiples argumentos. Por ejemplo, muestre líneas de más de 17 pero menos de 20 caracteres:
gawk 'length<20 && length>17' people
Para mostrar líneas que tengan exactamente 20 caracteres, ejecute:
gawk 'length==20' people
Imprimir información basada en condiciones
El gawk
El comando permite el uso de las declaraciones if-else. Por ejemplo, otra forma de filtrar solo a las personas nacidas después de 1999 es con una declaración if simple:
gawk '{ if ($4>1999) print }' people
La declaración if establece la condición de que las entradas en la columna cuatro deben ser mayores que 1999 . La salida muestra solo las entradas que cumplen la condición. Expanda el comando en una instrucción if-else para imprimir líneas que no cumplan con la condición original.
gawk '{if ($4>1999) print $0," ==>00s"; else print $0, "==>90s"}' people
El comando incluye:
- Declaración If. Si se cumple la condición,
gawk
agrega una cadena "==>90s " a la línea de salida. - Declaración else. En caso de que la línea no cumpla la condición,
gawk
aún imprime esa línea en la salida, agregando "==>00s " cadena a la salida.
Agregar un encabezado
De la misma forma en que el END
permite a los usuarios modificar la salida al final del archivo, el BEGIN
declaración da formato a los datos al principio.
Cuando se usa con awk
, el BEGIN
Las secciones siempre se ejecutan primero. Después de eso, awk
ejecuta las líneas restantes. Una forma de usar el BEGIN
instrucción es agregar un encabezado a la salida.
Ejecute el siguiente comando para agregar una sección sobre el awk
salida:
gawk 'BEGIN {print "No/First&Last Name/Year of Birth"} {print $0}' people
Encuentre la longitud de línea más larga
Combina argumentos anteriores con el si y END
declaraciones para encontrar la línea más larga en las personas archivo:
gawk '{ if (length($0) > max) max = length($0) } END { print max }' people
Encuentre el Número de Campos
El gawk
El comando también permite a los usuarios mostrar la cantidad de campos con el NF
variable. La forma más sencilla de mostrar el número de campos imprime un resultado difícil de leer:
gawk '{print NF}' people
El comando genera el número de campos por línea sin ninguna información adicional. Para personalizar la salida y hacerla más legible por humanos, ajuste el comando inicial:
gawk '{print NR, "-->", NF}' people
El comando ahora incluye:
- El
NR
variable que agrega números de línea a cada línea de salida. - El
-->
cadena que separa los números de línea de los números de campo.
Otra forma de mostrar números de línea y campo en las personas archivo es para imprimir columnas con NF
. Tenga en cuenta que las personas archivo incluye números ordinales en la columna uno. Por lo tanto, el NR
se omite la variable:
gawk '{print $0, "-->", NF}' people
Finalmente, para imprimir el número total de campos, ejecute:
gawk '{num_fields = num_fields + NF} END {print num_fields}' people
El archivo tiene diez líneas y cuatro columnas. Por lo tanto, la salida es correcta.
Conclusión
Después de leer este tutorial, sabrá cómo usar el gawk
para procesamiento de texto avanzado y manipulación de datos.
También considere usar grep, una poderosa herramienta de Linux para buscar cadenas, palabras y patrones.