Procesar múltiples archivos de entrada usando Awk
Introducción
Awk es una potente herramienta de procesamiento de texto ampliamente utilizada por desarrolladores, administradores de sistemas y analistas para manipular datos de diversas formas. Es una herramienta versátil que puede procesar archivos de texto, extraer datos y transformarlos en una variedad de formatos. Una de las características clave de Awk es su capacidad para procesar múltiples archivos de entrada al mismo tiempo, lo que lo hace ideal para tareas de procesamiento por lotes. En este artículo, exploraremos cómo usar Awk para procesar múltiples archivos de entrada y examinaremos varios ejemplos de cómo se puede usar en la práctica.
Usando Awk con múltiples archivos de entrada
Awk es una herramienta de línea de comandos diseñada para procesar archivos de texto. De forma predeterminada, Awk lee la entrada estándar (stdin), que puede redirigirse desde un archivo o canalizarse desde otro comando. Sin embargo, Awk también puede procesar varios archivos de entrada al mismo tiempo, lo que puede resultar útil para tareas de procesamiento por lotes.
Al procesar múltiples archivos de entrada, Awk trata cada archivo como un flujo separado de datos de entrada. Lee cada archivo en secuencia, procesando los datos de entrada de cada archivo por turno. Esto significa que si tiene varios archivos que contienen el mismo tipo de datos, puede usar Awk para procesarlos todos de una sola vez, en lugar de tener que procesar cada archivo individualmente.
Lectura de datos de múltiples archivos de entrada
Para leer datos de múltiples archivos de entrada, puede especificar nombres de archivos como argumentos para Awk cuando lo ejecuta. Por ejemplo, suponga que tiene dos archivos, archivo1.txt y archivo2.txt, que contienen los siguientes datos:
archivo1.txt −
apple
banana
orange
archivo2.txt −
carrot
potato
Puede usar Awk para leer datos de ambos archivos e imprimirlos en la pantalla usando el siguiente comando:
awk '{print}' file1.txt file2.txt
Este comando le dice a Awk que lea datos de file1.txt y file2.txt y los imprima en la pantalla. El comando '{print}' se usa para especificar la acción que Awk debe realizar para cada línea de datos de entrada, en este caso, imprimirlos en la pantalla.
Combinar datos de múltiples archivos de entrada
Otra forma de utilizar Awk con varios archivos de entrada es combinar datos de archivos en un único flujo de salida. Esto puede resultar útil si tiene varios archivos que contienen datos relacionados y desea combinarlos en un solo conjunto de datos. Para hacer esto, puede usar el comando cat para concatenar archivos y luego canalizar la salida a Awk.
Por ejemplo, suponga que tiene dos archivos, archivo1.txt y archivo2.txt, que contienen los siguientes datos:
archivo1.txt −
1,apple
2,banana
3,orange
archivo2.txt −
1,carrot
2,potato
Puede utilizar el siguiente comando para combinar datos de ambos archivos en un único flujo de salida:
cat file1.txt file2.txt | awk -F ',' '{print $1,$2}'
Este comando utiliza el comando cat para concatenar file1.txt y file2.txt en una única secuencia de salida. Luego, el flujo de salida se canaliza a Awk, al que se le indica que use una coma (',') como separador de campo usando la opción -F. El comando '{print $1,$2}' se utiliza para imprimir el primer y segundo campo de cada línea de datos de entrada, separados por un espacio.
Procesamiento de datos de múltiples archivos de entrada:
El procesamiento de datos de múltiples archivos de entrada puede implicar una variedad de operaciones, como filtrado, clasificación y agregación. Awk proporciona una amplia gama de funciones integradas que se pueden utilizar para realizar estas operaciones, lo que la convierte en una poderosa herramienta para el procesamiento de datos.
Por ejemplo, suponga que tiene dos archivos, archivo1.txt y archivo2.txt, que contienen los siguientes datos:
archivo1.txt -
1,apple,0.5
2,banana,0.4
3,orange,0.3
archivo2.txt −
1,carrot,0.2
2,potato,0.1
Puede usar Awk para procesar datos de ambos archivos y calcular el peso total de todas las frutas y verduras usando el siguiente comando:
awk -F ',' '{if ($2 == "apple" || $2 == "banana" || $2 == "orange") sum += $3; else sum += 0.0} END {print sum}' file1.txt file2.txt
Este comando usa la opción -F para especificar la coma (',') como separador de campo. Luego utiliza una declaración if para filtrar los datos que no son frutas del archivo 2.txt y calcular el peso total de todas las frutas en ambos archivos. La variable de suma se inicializa a cero y se incrementa para cada línea de datos de entrada que coincida con los criterios de fruta. El bloque FINAL se utiliza para imprimir el valor final de la suma.
Ejemplos de uso de Awk con múltiples archivos de entrada
Calcular el tamaño total de todos los archivos en un directorio
Suponga que desea calcular el tamaño total de todos los archivos en un directorio y sus subdirectorios. Puede usar el siguiente comando para generar una lista de todos los archivos en el directorio y sus subdirectorios, y luego canalizar la salida a Awk para calcular el tamaño total:
find /path/to/directory -type f -print0 | xargs -0 ls -l | awk '{sum += $5} END {print sum}'
Este comando utiliza el comando find para generar una lista de todos los archivos en el directorio y sus subdirectorios, y el comando xargs para pasar la lista a ls -l para generar una lista detallada de cada archivo. La salida de ls -l luego se canaliza a Awk, que usa el campo $5 para calcular el tamaño total de todos los archivos en bytes. El bloque FINAL se utiliza para imprimir el valor final de la suma.
Fusionar dos archivos CSV
Suponga que tiene dos archivos CSV que contienen datos relacionados y desea fusionarlos en un solo archivo CSV. Puede utilizar el siguiente comando para fusionar archivos y generar el resultado en un nuevo archivo:
awk 'FNR==1 && NR!=1 {next;}{print}' file1.csv file2.csv > merged.csv
Este comando utiliza variables integradas FNR y NR para garantizar que la fila del encabezado solo se incluya una vez en el archivo de salida. El primer archivo se procesa normalmente, pero el segundo archivo se omite si el número de línea actual (FNR) es igual a 1 y el número de línea total (NR) no es igual a 1. La salida resultante se redirige a un nuevo archivo, fusionado.csv.
Conclusión
Awk es una poderosa herramienta de procesamiento de texto que se puede utilizar para procesar múltiples archivos de entrada. Proporciona una amplia gama de funciones integradas que se pueden utilizar para manipular datos de diversas formas, lo que lo hace ideal para tareas de procesamiento por lotes. Al combinar múltiples archivos de entrada, Awk puede ayudarlo a optimizar sus flujos de trabajo de procesamiento de datos y mejorar la eficiencia de sus tareas de análisis de datos.