En este artículo, explicaremos el uso básico del comando AWK y cómo se puede usar para dividir un archivo de cadenas. Hemos realizado los ejemplos de este artículo en un sistema de Buster Debian 10, pero se pueden replicar fácilmente en la mayoría de las distribuciones de Linux.
El archivo de muestra que usaremos
El archivo de muestra de las cadenas que usaremos para demostrar el uso del comando AWK es el siguiente:
Esto es lo que indica cada columna del archivo de muestra:
Ejemplo 1: use AWK para imprimir todas las líneas de un archivo
Imprimir todas y cada una de las líneas de un archivo especificado es el comportamiento predeterminado del comando AWK. En la siguiente sintaxis del comando AWK, no estamos especificando ningún patrón que AWK debería imprimir, por lo tanto, se supone que el comando aplica la acción "Imprimir" a todas las líneas del archivo.
Sintaxis:
$ awk 'print' nombre de archivo.TXT
Ejemplo:
En este ejemplo, le digo al comando AWK que imprima el contenido de mi archivo de muestra, línea por línea.
$ awk 'print' sample_file.TXT
Ejemplo 2: Use AWK para imprimir solo las líneas que coincidan con un patrón dado
Con AWK, puede especificar un patrón y el comando imprimirá solo las líneas que coinciden con ese patrón.
Sintaxis:
$ AWK '/ Pattern_To_Be_Matched/ print' FileName.TXT
Ejemplo:
Desde el archivo de muestra, si quiero imprimir solo la (s) línea (s) que contiene la variable 'B', puedo usar el siguiente comando:
$ awk '/ b/ print' sample_file.TXT
Para que el ejemplo sea más significativo, permítanme imprimir solo la información sobre los empleados que son 'profesor.
$ awk '/ profesor/ print' sample_file.TXT
El comando solo imprime las líneas/entradas que contienen la cadena "Profesor", por lo que tenemos información más valiosa derivada de los datos.
Ejemplo 3. Use AWK para dividir el archivo para que solo se impriman campos/columnas específicas
En lugar de imprimir todo el archivo, puede hacer AWK para imprimir solo columnas específicas del archivo. AWK trata todas las palabras, separadas por espacio en blanco, en una línea como un registro de columna de forma predeterminada. Almacena el registro en una variable de $ N. Donde $ 1 representa la primera palabra, $ 2 almacena la segunda palabra, $ 3 el cuarto, y así sucesivamente. $ 0 almacena toda la línea, por lo que se imprime la línea de la OMS, como se explica en el Ejemplo 1.
Sintaxis:
$ awk 'imprimir $ n, .. .' Nombre del archivo.TXT
Ejemplo:
El siguiente comando imprimirá solo la primera columna (nombre) y la segunda columna (sujeto) de mi archivo de muestra:
$ awk 'imprimir $ 1, $ 2' sample_file.TXT
Ejemplo 4: use AWK para contar e imprimir el número de líneas en las que se combina un patrón
Puede decirle a AWK que cuente el número de líneas en las que se combina un patrón especificado y luego sale que 'cuentan'.
Sintaxis:
$ AWK '/Pattern_to_Be_Matched/++ CNT End print "Count =", CNT'
Nombre del archivo.TXT
Ejemplo:
En este ejemplo, quiero contar el número de personas que enseñan el tema "inglés". Por lo tanto, le diré al comando AWK que coincida con el patrón "inglés" e imprimo el número de líneas en las que se combina este patrón.
$ awk '/inglés/++ cnt end print "count =", cnt' sample_file.TXT
El recuento aquí sugiere que 2 personas enseñan inglés desde los registros de archivos de muestra.
Ejemplo 5: Use AWK para imprimir solo líneas con más de un número específico de caracteres
Para esta tarea, utilizaremos la función AWK incorporada llamada "Longitud". Esta función devuelve la longitud de la cadena de entrada. Por lo tanto, si queremos que AWK imprima solo líneas con más o incluso menos de los caracteres, podemos usar la función de longitud de la siguiente manera:
Para líneas de impresión con caracteres mayores que un número:
$ awk 'longitud ($ 0)> n' nombre de archivo.TXT
Para líneas de impresión con caracteres inferiores a un número:
$ awk 'longitud ($ 0) < n' filename.txt
Donde n es el número de caracteres que desea especificar para una línea.
Ejemplo:
El siguiente comando imprimirá solo las líneas de mi archivo de muestra que tienen caracteres más de 30:
$ awk 'longitud ($ 0)> 30' sample_file.TXT
Ejemplo 6: use AWK para guardar la salida del comando en otro archivo
Al usar el operador de redirección '>', puede usar el comando AWK para imprimir su salida a otro archivo. Esta es la forma en que puedes usarlo:
Nombre de archivo de $ AWK 'Criteria_to_print ".TXT> OutputFile.TXT
Ejemplo:
En este ejemplo, usaré el operador de redirección con mi comando AWK para imprimir solo los nombres de los empleados (columna 1) en un nuevo archivo:
$ awk 'imprimir $ 1' sample_file.txt> empleado_names.TXT
Verifiqué a través de los comandos CAT que el nuevo archivo solo contiene los nombres de los empleados.
Ejemplo 7: Use AWK para imprimir solo líneas no vacías desde un archivo
AWK tiene algunos comandos incorporados que puede usar para filtrar la salida. Por ejemplo, el comando NF se usa para mantener un recuento de los campos dentro del registro de entrada actual. Aquí, usaremos el comando NF para imprimir solo las líneas no vacías del archivo:
$ awk 'nf> 0' sample_file.TXT
Obviamente, puede usar el siguiente comando para imprimir las líneas vacías:
$ awk 'nf < 0' sample_file.txt
Ejemplo 8: use AWK para contar las líneas totales en un archivo
Otra función incorporada llamada NR mantiene un recuento del número de registros de entrada (generalmente líneas) de un archivo determinado. Puede usar esta función en AWK como lo siguiente para contar el número de líneas en un archivo:
$ awk 'end print nr' sample_file.TXT
Esta fue la información básica que necesita para comenzar dividiendo archivos con el comando AWK. Puede usar la combinación de estos ejemplos para obtener información más significativa de su archivo de cadenas a través de AWK.