Cómo dividir un archivo de cuerdas con AWK

Cómo dividir un archivo de cuerdas con AWK
El comando Linux AWK (abreviado de los nombres de los desarrolladores; aho, Weinberger y Kernighan) es una excelente manera de procesar y analizar un archivo de cadenas. Para que los archivos sean más informativos, deben organizarse en forma de filas y columnas. Luego, puede usar AWK en estos archivos para:
  • Escanee los archivos, línea por línea.
  • Dividir cada línea en campos/columnas.
  • Especificar patrones y comparar las líneas del archivo con esos patrones
  • Realizar varias acciones en las líneas que coincidan con un patrón dado

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:

  • La primera columna contiene el nombre de los empleados/maestros en una escuela
  • La segunda columna contiene el tema que enseña el empleado
  • La tercera columna indica si el empleado es profesor o profesor asistente
  • La cuarta columna contiene el pago del empleado

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.