Awk es un lenguaje de scripting utilizado para manipular datos y generar informes.El lenguaje de programación de comandos awk no requiere compilación, y permite al usuario usar variables, funciones numéricas, funciones de cadena y operadores lógicos.

Awk es una utilidad que permite a un programador escribir programas pequeños pero efectivos en forma de declaraciones que definen patrones de texto que se deben buscar en cada línea de un documento y la acción que se debe tomar cuando se encuentra una coincidencia dentro de una línea., Awk se utiliza principalmente para el escaneo y procesamiento de patrones. Busca uno o más archivos para ver si contienen líneas que coincidan con los patrones especificados y luego realiza las acciones asociadas.

Awk se abrevia de los nombres de los desarrolladores – Aho, Weinberger, y Kernighan.

¿Qué podemos hacer con AWK ?

1. Operaciones AWK:
(a) escanea un archivo LÍNEA por línea
(b) divide cada línea de entrada en campos
(c) compara la línea/campos de entrada con el patrón
(d) realiza acciones en líneas coincidentes

2., Útil para:
(a) transformar archivos de datos
(b) producir informes formateados

3. Construcciones de programación:
(A) líneas de salida de formato
(b) operaciones aritméticas y de cadena
(c) condicionales y bucles

sintaxis:

awk options 'selection _criteria {action }' input-file > output-file

opciones:

-f program-file : Reads the AWK program source from the file program-file, instead of from the first command line argument.-F fs : Use fs for the input field separator

comandos de muestra

Ejemplo:
siguiente archivo de texto como el archivo de entrada para todos los casos a continuación.

$cat > employee.txt 
ajay manager account 45000sunil clerk account 25000varun manager sales 50000amit manager account 47000tarun peon sales 15000deepak clerk sales 23000sunil peon sales 13000satvik director purchase 80000 

1. Comportamiento predeterminado de Awk: por defecto Awk imprime cada línea de datos del archivo especificado.,

$ awk '{print}' employee.txt

Resultado:

ajay manager account 45000sunil clerk account 25000varun manager sales 50000amit manager account 47000tarun peon sales 15000deepak clerk sales 23000sunil peon sales 13000satvik director purchase 80000 

En el ejemplo anterior, el patrón no se da. Así que las acciones son aplicables a todas las líneas. Acción imprimir sin ningún argumento imprime toda la línea por defecto, por lo que imprime todas las líneas del archivo sin error.

2. Imprima las líneas que coincidan con el patrón dado.

$ awk '/manager/ {print}' employee.txt 

Resultado:

ajay manager account 45000varun manager sales 50000amit manager account 47000 

En el ejemplo anterior, el comando awk imprime toda la línea que coincide con el ‘manager’.

3., Dividir una línea en campos: para cada línea de registro, es decir, el comando awk divide el registro delimitado por un carácter de espacio en blanco de forma predeterminada y lo almacena en las variables $n. Si la línea tiene 4 palabras, se almacenará en $1, $2,. 3 y respectively 4 respectivamente. Además, $0 representa toda la línea.

$ awk '{print $1,$4}' employee.txt 

salida:

ajay 45000sunil 25000varun 50000amit 47000tarun 15000deepak 23000sunil 13000satvik 80000 

en el ejemplo anterior, $1 y 4 4 representan los campos Nombre y salario respectivamente.,

Las Variables integradas en Awk

Las variables integradas de Awk incluyen las variables de Campo—$1, $2, $3, y así sucesivamente (0 0 es toda la línea) – que romper una línea de texto en palabras individuales o piezas llamadas campos.

NR: el comando NR mantiene un recuento actual del número de registros de entrada. Recuerde que los registros suelen ser líneas. El comando Awk realiza las instrucciones pattern/action una vez para cada registro en un archivo.

NF: el comando NF mantiene un recuento del número de campos dentro del registro de entrada actual.,

FS: el comando FS contiene el carácter separador de campos que se usa para dividir campos en la línea de entrada. El valor predeterminado es «espacio en blanco», que significa espacio y caracteres de tabulación. FS se puede reasignar a otro carácter (normalmente en BEGIN) para cambiar el separador de campos.

RS: el comando RS almacena el carácter separador del registro actual. Dado que, de forma predeterminada, una línea de entrada es el registro de entrada, el carácter separador de Registros predeterminado es una nueva línea.

OFS: el comando OFS almacena el separador de campos de salida, que separa los campos cuando Awk los imprime. El valor predeterminado es un espacio en blanco., Siempre que print tenga varios parámetros separados por comas, imprimirá el valor DE OFS entre cada parámetro.

ORS: el comando ORS almacena el separador de registros de salida, que separa las líneas de salida cuando Awk las imprime. El valor predeterminado es un carácter de nueva línea. print muestra automáticamente el contenido de ORS al final de lo que se le da a imprimir.,

ejemplos:

Uso de variables incorporadas NR (número de línea de visualización)

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

salida:

1 ajay manager account 450002 sunil clerk account 250003 varun manager sales 500004 amit manager account 470005 tarun peon sales 150006 deepak clerk sales 230007 sunil peon sales 130008 satvik director purchase 80000 

en el ejemplo anterior, el comando awk con NR imprime todas las líneas junto con el número de línea.

el Uso de NF variables integradas (Mostrar el Último Campo)

$ awk '{print $1,$NF}' employee.txt 

Resultado:

ajay 45000sunil 25000varun 50000amit 47000tarun 15000deepak 23000sunil 13000satvik 80000 

En el ejemplo anterior $1 representa el Nombre y $NF representa Sueldo. Podemos obtener el salario usando $NF, donde represents NF representa el último campo.,

otro uso de las variables incorporadas NR (línea de visualización de 3 a 6)

$ awk 'NR==3, NR==6 {print NR,$0}' employee.txt 

salida:

3 varun manager sales 500004 amit manager account 470005 tarun peon sales 150006 deepak clerk sales 23000 

Más ejemplos

para el archivo de texto dado:

$cat > geeksforgeeks.txtA B CTarun A12 1Man B6 2Praveen M42 3

1) para imprimir el primer elemento junto con el número de fila(nr) separado con » – » de cada línea en GeeksforGeeks.txt:

$ awk '{print NR "- " $1 }' geeksforgeeks.txt
1 - Tarun2 – Manav 3 - Praveen

2) Para volver a la segunda fila/elemento de geeksforgeeks.,esta línea presente en el archivo:

$ awk '{ if (length($0) > max) max = length($0) } END { print max }' geeksforgeeks.txt
13

5) para contar las líneas en un archivo:

$ awk 'END { print NR }' geeksforgeeks.txt
3

6) impresión de líneas con más de 10 caracteres:

$ awk 'length($0) > 10' geeksforgeeks.txt
Tarun A12 1Praveen M42 3

7) para buscar/verificar cualquier cadena en cualquier columna específica:

$ awk '{ if($3 == "B6") print $0;}' geeksforgeeks.txt

8) para imprimir los cuadrados de los primeros números de 1 A N digamos 6:

$ awk 'BEGIN { for(i=1;i<=6;i++) print "square of", i, "is",i*i; }'
square of 1 is 1square of 2 is 4square of 3 is 9square of 4 is 16square of 5 is 25square of 6 is 36

Este artículo es contribuido por anshika Goyal y Praveen Negi., Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando contribute.geeksforgeeks.org o envíe su artículo a [email protected]. vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Articles

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *