GNU/Linux >> Tutoriales Linux >  >> Linux

Comando gawk de Linux con ejemplos

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:

  1. Números ordinales.
  2. Nombres.
  3. Apellidos.
  4. 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.


Linux
  1. Ordenar comando en Linux con ejemplos

  2. Comando chattr en Linux con ejemplos

  3. Comando JQ en Linux con ejemplos

  4. Ejemplos de comandos ln en Linux

  5. Ejemplos de comandos de archivo en Linux

Uso de Cat Command en Linux con ejemplos

Comando WC de Linux con ejemplos

Comando IP de Linux con ejemplos

Uso del comando Linux mv con ejemplos

Comando de montaje de Linux con ejemplos

Comando make de Linux con ejemplos