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.