El comando gawk en Linux se usa para escanear patrones y procesar lenguaje. El comando awk no requiere compilación y permite al usuario usar variables, funciones numéricas, funciones de string y operadores lógicos. Es una utilidad que permite a los programadores escribir programas pequeños y efectivos en forma de declaraciones que definen patrones de texto que se buscarán en un documento de texto y la acción que se tomará cuando se encuentre una coincidencia dentro de una línea.
El comando gawk se puede utilizar para:
- Escanea un archivo línea por línea.
- Divide cada línea de entrada en campos.
- Compara la línea/los campos de entrada con el patrón.
- Realiza acciones en líneas coincidentes.
- Transformar archivos de datos.
- Producir informes formateados.
- Formato de líneas de salida.
- Operaciones aritméticas y de strings.
- Condicionales y bucles.
Sintaxis:
gawk [POSIX / GNU style options] -f progfile [--] file ... gawk [POSIX / GNU style options] [--] 'program' file ...
Algunas opciones importantes:
- -f progfile, –file=progfile: Lee el código fuente del programa AWK desde el archivo program-file, en lugar del primer argumento de la línea de comando. Se pueden usar múltiples opciones -f (o –file).
- -F fs, –field-separator=fs: Utiliza FS para el separador de campo de entrada (el valor de la variable predefinida FS).
- -v var=val, –assign=var=val: Asigna el valor val a la variable var , antes de que comience la ejecución del programa.
Ejemplos:
- -F: Utiliza FS para el separador de campo de entrada (el valor de la variable predefinida FS).
gawk -F: '{print $1}' /etc/passwd
- -f: Lee el código fuente del programa AWK desde el archivo program-file, en lugar del primer argumento de la línea de comando. Se pueden usar múltiples opciones -f (o –file).
gawk -F: -f mobile.txt /etc/passwd
Algunas variables incorporadas:
- NR: Mantiene un conteo actual del número de línea de entrada.
- NF: Mantiene un conteo del número de campos dentro del registro de entrada actual.
- FS: contiene el carácter separador de campo que se utiliza para dividir campos en la línea de entrada.
- RS: Almacena el carácter separador de registro actual.
- OFS: Almacena el separador de campos de salida, que separa los campos cuando Awk los imprime.
- ORS: Almacena el separador de registros de salida, que separa las líneas de salida cuando Awk las imprime.
Ejemplos:
- NR:
gawk '{print NR "-" $1 }' mobile.txt
- RS:
gawk 'BEGIN{FS=":"; RS="-"} {print $1, $6, $7}' /etc/passwd
- OFS:
gawk 'BEGIN{FS=":"; OFS="-"} {print $1, $6, $7}' /etc/passwd
Muestra más comandos con ejemplos:
- Considere el siguiente archivo de texto de muestra como el archivo de entrada para todos los casos a continuación.
Para crear un archivo de texto:
cat > mobile.txt
- Comportamiento predeterminado de gawk: por defecto, gawk imprime cada línea de datos del archivo especificado.
gawk '{print}' mobile.txt
- Para imprimir las líneas que coinciden con el patrón dado:
gawk '/Sunil/ {print}' mobile.txt
-
En el ejemplo anterior, el comando gawk imprime toda la línea que coincide con ‘Sunil’.
- Para dividir una línea en campos: para cada línea, el comando gawk divide el registro delimitado por el carácter de espacio en blanco de forma predeterminada y lo almacena en las variables $n. Si la línea tiene 3 palabras, se almacenará en $1, $2 y $3 respectivamente. $0 representa la línea completa.
gawk '{print $2}' mobile.txt
-
En el ejemplo anterior, $2 representa el número de móvil. campo.
- Para mostrar el recuento de líneas:
gawk '{print NR, $0}' mobile.txt
- Para encontrar la longitud de la línea más larga presente en el archivo:
gawk '{ if (length($0) > max) max = length($0) } END { print max }' mobile.txt
- Para contar las líneas en un archivo:
gawk 'END { print NR }' mobile.txt
- Para imprimir líneas con más de 5 caracteres:
gawk 'length($0) > 5' mobile.txt
Nota:
- Para verificar la página del manual del comando gawk, use el siguiente comando:
man gawk
- Para consultar la página de ayuda del comando gawk, use el siguiente comando:
gawk --help
Publicación traducida automáticamente
Artículo escrito por Mandeep_Sheoran y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA