Articles

awk scripting explicado con ejemplos prácticos

Posted on

El comando / herramienta awk se utiliza para manipular filas y columnas de texto en un archivo. Awk ha construido en funciones de cadena y matrices asociativas. Awk soporta la mayoría de los operadores, bloques condicionales y disponibles en el lenguaje C. awk scripting

awk scripting

Una de las cosas buenas es que podemos usar el comando awk junto con otros comandos para lograr la salida requerida. También podemos convertir un script awk a perl.

Texto básico de awk: ‘BEGIN {inicio_acción} {acción} END {stop_action}’ nombre_archivo

Aquí están las acciones

  • El bloque BEGIN se realiza antes del archivo
  • El bloque END se realiza después de procesar el archivo
  • El resto de acciones se realizan mientras se procesa el archivo
  • Ejemplos: Crear un archivo con nombre de prueba por debajo de los datos en él

# cat test

De los datos anteriores, se puede observar que el archivo tiene filas y columnas separadas por espacio y las filas son nuevas líneas. Para explicar este artículo vamos a utilizar el archivo de prueba para algunos ejemplos.

Sintaxis del comando: awk ‘{print $3}’ test

Aquí $3 tiene un significado de imprimir la tercera columna de todas las columnas del archivo de prueba. Si quieres imprimir varias columnas menciona los nombres de las columnas separados por comas $1,$2,$3….. a continuación se muestra la salida que es la 3ª columna en todas las filas

# awk '{ print $3 }' testroot# awk '{ print $1,$3,$6 }' test-rw-r--r--. root Apr

Para imprimir la 4ª y 6ª columnas de un fichero utiliza awk ‘{print $4,$6}’ test

Aquí los bloques begin y end no se utilizan en awk. Así que el comando print se ejecutará por cada fila que lea del fichero. En el siguiente ejemplo veremos cómo utilizar los bloques begin y end.

Imprimir la suma del valor de la columna

Sintaxis del comando: awk ‘BEGIN {sum=0} {suma=suma+$7} END {print sum}’ test

El ejemplo anterior imprimirá la suma del valor de la 7ª columna. En el bloque de inicio se asigna la variable suma con valor 0. En el siguiente bloque se añade el valor de la 7ª columna a la variable suma. Esta adición de la 7ª columna a la variable suma se repite para cada fila que se procesa. Cuando se procesan todas las filas la variable sum tendrá la suma de los valores de la 7ª columna. Este valor se imprime en el bloque End como se muestra a continuación:

# awk 'BEGIN {sum=0} {sum=sum+$7} END {print sum}' test300

Suma del valor de la columna usando awk script

En el 2º ejemplo vimos que cómo SUMAR el valor de la columna 7ª, de la misma manera en lugar de escribir en una declaración de línea escribimos como script. Crea un archivo sumofcolumn y pega el siguiente script en ese archivo

#!/usr/bin/awk -fBEGIN {sum=0} {sum=sum+$7} END {print sum}

Ahora ejecuta el script usando el comando awk como se muestra a continuación

# awk -f sumofcolumn test300

Esto ejecutará el script en el archivo sumofcolumn y muestra la suma de la 7ª columna en la prueba.

Busca la cadena e imprime la línea coincidente

Sintaxis del comando: awk ‘{if($9 == «arkit») print $0;}’ test

El ejemplo anterior buscará la cadena «arkit» en la 3ª columna y si encuentra una coincidencia entonces imprimirá la línea completa. La salida de este comando awk es la siguiente

# awk '{ if($3 == "arkit") print $0;}' test

Bucle for con multiplicación del valor mencionado incrementado por +1

Sintaxis del comando: awk ‘BEGIN { for(i=1;i<=10;i++) print «El valor multiplicado de», i, «es»,i*i; }’

El comando anterior imprimirá el multiplicado de los primeros números del 1 al 10. i++ añadirá +1 al número para que siga aumentando hasta el 10. La salida del comando es la siguiente

# awk 'BEGIN { for(i=1;i<=10;i++) print "Multiplied value of", i, "is",i*i; }'Multiplied value of 1 is 1

6. Separador de campos de entrada

Ya has visto $0,$1,$2.. que imprime toda la línea, primera columna, segunda columna.. respectivamente. Ahora veremos otras variables incorporadas con ejemplos.

Según nuestro archivo de ejemplo de prueba tenemos columnas que están separadas por espacio, pero en lugar de espacio si tienes cualquier otro símbolo como .es decir : , – podemos hacer uso de ellos para separar e imprimir.

Ejemplo: si tienes : (dos puntos) como separador entonces usa lo siguiente

awk ‘BEGIN {FS=»:»} {print $2}’ test

O

awk -F: ‘{print $2}’ test

esto imprimirá la salida como se indica a continuación

# awk -F: '{print $2}' test41 file12

OFS – Variable separadora de campos de salida

Por defecto siempre que imprimimos los campos usando la sentencia print los campos se muestran con el carácter espacio como delimitador. Por ejemplo

Sintaxis del comando: awk ‘{print $4,$5}’ test

# awk '{print $4,$5}' testroot 0

Podemos cambiar este comportamiento por defecto utilizando la variable OFS como

Sintaxis del comando: awk ‘BEGIN {OFS=»:»} {print $4,$5}’ test

# awk 'BEGIN {OFS=":"} {print $4,$5}' testroot:0

Nota: print $4,$5 y print $4$5 no funcionarán de la misma manera. El primero muestra la salida con espacio como delimitador. El segundo muestra la salida sin ningún delimitador.

NF – Number of fields count

NF se puede utilizar para conocer el número de campos en cada línea a continuación es el ejemplo de comando

# awk '{print NF}' test9

NR – Número de registros

NR se puede utilizar para conocer el número de línea o el recuento de líneas en un archivo

# awk '{print NR}' test12345678910

El ejemplo anterior imprimirá el número de línea, en el archivo de prueba tenemos diez líneas.

Imprimir el número de registros en un archivo en particular

Si ves el ejemplo anterior de la 9ª sección se imprimen todos los números de línea, pero el requisito es que me gustaría ver sólo el recuento de registros.

# awk 'END {print NR}' test10

Esto mostrará el número total de líneas en el archivo de prueba.

Funciones de cadena en Awk:

Algunas de las funciones de cadena en awk son:

  • index(cadena,buscar)
  • longitud(cadena)
  • split(cadena,array,separador)
  • substr(cadena,posición)
  • substr(cadena,posición,máx)
  • tolower(cadena)
  • toupper(cadena)

Ejemplos avanzados:

Filtrar líneas usando la función split de Awk

La función split de awk divide una cadena en un array usando el delimitador.

La sintaxis de la función split es
split(cadena, array, delimitador)

Ahora veremos cómo filtrar las líneas usando la función split con un ejemplo.

La entrada «advanced.txt» contiene los datos en el siguiente formato

# cat advanced.txt1 U,N,ARKIT,0002 A,B,TEST,1113 I,M,ARKIT,2224 C,D,TECH,3335 T,I,RAVI,444

Salida requerida: Ahora tenemos que imprimir sólo las líneas en las que esos 2º campos tienen la cadena «ARKIT» como 3º campo.

The output is:1 U,N,ARKIT,0003 I,M,ARKIT,222

El comando awk para obtener la salida es el que se menciona a continuación

Command: awk '{ split($2,arr,","); if(arr == "0") print $0 } ' advanced.txt
# awk '{ split($2,arr,","); if(arr == "ARKIT") print $0} ' advanced.txt1 U,N,ARKIT,0003 I,M,ARKIT,222

Algunos ejemplos de comandos awk / herramientas los veremos en próximos post Stay tune.

Palabras clave: awk scripting en linux,como ejecutar un script awk en linux,como escribir un script awk en linux,awk en linux bash,awk en linux command,awk script examples linux,awk in linux example,awk in linux means,awk in linux pdf,awk in linux programming,awk en linux ppt,awk en linux shell script,awk comando en linux shell scripting,awk en linux tutorial,awk en linux terminal,awk en linux con ejemplos, awk scripting, awk scripting, awk scripting, awk scripting, awk scripting

Gracias por la lectura.

Deja una respuesta

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