Este artículo es parte de la serie de ejemplos de tutoriales de Awk en curso. Awk tiene varias variables integradas poderosas. Hay dos tipos de variables integradas en Awk.
- Variable que define valores que se pueden cambiar, como separador de campo y separador de registro.
- Variable que se puede utilizar para el procesamiento y los informes, como número de registros, número de campos.
1. Ejemplo de Awk FS:variable separadora de campo de entrada.
Awk lee y analiza cada línea de la entrada en función del carácter de espacio en blanco de forma predeterminada y establece las variables $ 1, $ 2, etc. La variable Awk FS se usa para establecer el separador de campo para cada registro. Awk FS se puede establecer en cualquier carácter único o expresión regular. Puede usar el separador de campo de entrada usando una de las siguientes dos opciones:
- Usando la opción de línea de comando -F.
- Awk FS se puede configurar como una variable normal.
Syntax: $ awk -F 'FS' 'commands' inputfilename (or) $ awk 'BEGIN{FS="FS";}'
- Awk FS es cualquier carácter único o expresión regular que desee utilizar como separador de campo de entrada.
- Awk FS se puede cambiar cualquier número de veces, conserva sus valores hasta que se cambia explícitamente. Si desea cambiar el separador de campo, es mejor cambiarlo antes de leer la línea. Entonces ese cambio afecta la línea de lo que lees.
Aquí hay un ejemplo de awk FS para leer el archivo /etc/passwd que tiene ":" como delimitador de campo.
$ cat etc_passwd.awk BEGIN{ FS=":"; print "Name\tUserID\tGroupID\tHomeDirectory"; } { print $1"\t"$3"\t"$4"\t"$6; } END { print NR,"Records Processed"; }
$awk -f etc_passwd.awk /etc/passwd Name UserID GroupID HomeDirectory gnats 41 41 /var/lib/gnats libuuid 100 101 /var/lib/libuuid syslog 101 102 /home/syslog hplip 103 7 /var/run/hplip avahi 105 111 /var/run/avahi-daemon saned 110 116 /home/saned pulse 111 117 /var/run/pulse gdm 112 119 /var/lib/gdm 8 Records Processed
2. Ejemplo de Awk OFS:variable de separador de campo de salida
Awk OFS es un equivalente de salida de la variable awk FS. Por defecto, awk OFS es un carácter de un solo espacio. El siguiente es un ejemplo OFS awk.
$ awk -F':' '{print $3,$4;}' /etc/passwd 41 41 100 101 101 102 103 7 105 111 110 116 111 117 112 119
Concatenator en la declaración de impresión "," concatena dos parámetros con un espacio que es el valor de awk OFS por defecto. Por lo tanto, el valor Awk OFS se insertará entre los campos en la salida como se muestra a continuación.
$ awk -F':' 'BEGIN{OFS="=";} {print $3,$4;}' /etc/passwd 41=41 100=101 101=102 103=7 105=111 110=116 111=117 112=119
3. Ejemplo de Awk RS:variable de separador de registros
Awk RS define una línea. Awk lee línea por línea por defecto.
Supongamos que las calificaciones de los estudiantes se almacenan en un archivo, cada registro está separado por una nueva línea doble y cada campo está separado por un carácter de nueva línea.
$cat student.txt Jones 2143 78 84 77 Gondrol 2321 56 58 45 RinRao 2122 38 37 65 Edwin 2537 78 67 45 Dayan 2415 30 47 20
Ahora, el siguiente script Awk imprime el nombre del estudiante y el Rollno del archivo de entrada anterior.
$cat student.awk BEGIN { RS="\n\n"; FS="\n"; } { print $1,$2; } $ awk -f student.awk student.txt Jones 2143 Gondrol 2321 RinRao 2122 Edwin 2537 Dayan 2415
En el script student.awk, lee los detalles de cada estudiante como un solo registro, porque awk RS ha sido asignado para duplicar el carácter de nueva línea y cada línea en un registro es un campo, ya que FS es un carácter de nueva línea.
4. Ejemplo de Awk ORS:variable separadora de registros de salida
SRO rara es un equivalente de salida de RS. Cada registro en la salida se imprimirá con este delimitador. El siguiente es un ejemplo de ORS awk:
$ awk 'BEGIN{ORS="=";} {print;}' student-marks Jones 2143 78 84 77=Gondrol 2321 56 58 45=RinRao 2122 38 37 65=Edwin 2537 78 67 45=Dayan 2415 30 47 20=
En la secuencia de comandos anterior, cada registro en el archivo de calificaciones de los estudiantes está delimitado por el carácter “=”.
5. Ejemplo de Awk NR:número de registros variables
Awk NR le da el número total de registros que se están procesando o el número de línea. En el siguiente ejemplo de awk NR, la variable NR tiene un número de línea, en la sección FIN, awk NR le indica el número total de registros en un archivo.
$ awk '{print "Processing Record - ",NR;}END {print NR, "Students Records are processed";}' student-marks Processing Record - 1 Processing Record - 2 Processing Record - 3 Processing Record - 4 Processing Record - 5 5 Students Records are processed
6. Ejemplo de Awk NF:número de campos en un registro
Awk NF le da el número total de campos en un registro. Awk NF será muy útil para validar si todos los campos existen en un registro.
Consideremos el archivo de calificaciones de los estudiantes, falta la puntuación de Test3 para los estudiantes, como se muestra a continuación.
$cat student-marks Jones 2143 78 84 77 Gondrol 2321 56 58 45 RinRao 2122 38 37 Edwin 2537 78 67 45 Dayan 2415 30 47
El siguiente script Awk, imprime el número de registro (línea) y el número de campos en ese registro. Por lo tanto, será muy sencillo descubrir que falta la puntuación de Test3.
$ awk '{print NR,"->",NF}' student-marks 1 -> 5 2 -> 5 3 -> 4 4 -> 5 5 -> 4
7. Awk FILENAME Ejemplo:Nombre del archivo de entrada actual
La variable FILENAME proporciona el nombre del archivo que se lee. Awk puede aceptar una cantidad de archivos de entrada para procesar.
$ awk '{print FILENAME}' student-marks student-marks student-marks student-marks student-marks student-marks
En el ejemplo anterior, imprime el NOMBRE DEL ARCHIVO, es decir, las calificaciones de los estudiantes para cada registro del archivo de entrada.
8. Ejemplo de Awk FNR:número de registros relativos al archivo de entrada actual
Cuando awk lee desde el archivo de entrada múltiple, la variable awk NR dará el número total de registros en relación con todo el archivo de entrada. Awk FNR le dará el número de registros para cada archivo de entrada.
$ awk '{print FILENAME, FNR;}' student-marks bookdetails student-marks 1 student-marks 2 student-marks 3 student-marks 4 student-marks 5 bookdetails 1 bookdetails 2 bookdetails 3 bookdetails 4 bookdetails 5
En el ejemplo anterior, en lugar de awk FNR, si usa awk NR, para el archivo bookdetails obtendrá de 6 a 10 para cada registro.
Lecturas recomendadas