Processar vários arquivos de entrada usando Awk
Introdução
Awk é uma poderosa ferramenta de processamento de texto amplamente usada por desenvolvedores, administradores de sistema e analistas para manipular dados de diversas maneiras. É uma ferramenta versátil que pode processar arquivos de texto, extrair dados e transformá-los em diversos formatos. Um dos principais recursos do Awk é a capacidade de processar vários arquivos de entrada ao mesmo tempo, tornando-o ideal para tarefas de processamento em lote. Neste artigo, exploraremos como usar o Awk para processar vários arquivos de entrada e examinaremos vários exemplos de como ele pode ser usado na prática.
Usando Awk com vários arquivos de entrada
Awk é uma ferramenta de linha de comando projetada para processar arquivos de texto. Por padrão, o Awk lê a entrada da entrada padrão (stdin), que pode ser redirecionada de um arquivo ou canalizada de outro comando. No entanto, o Awk também pode processar vários arquivos de entrada ao mesmo tempo, o que pode ser útil para tarefas de processamento em lote.
Ao processar vários arquivos de entrada, o Awk trata cada arquivo como um fluxo separado de dados de entrada. Ele lê cada arquivo em sequência, processando os dados de entrada de cada arquivo por vez. Isso significa que se você tiver vários arquivos que contenham o mesmo tipo de dados, poderá usar o Awk para processá-los todos de uma vez, em vez de processar cada arquivo individualmente.
Lendo dados de vários arquivos de entrada
Para ler dados de vários arquivos de entrada, você pode especificar nomes de arquivos como argumentos para o Awk ao executá-lo. Por exemplo, suponha que você tenha dois arquivos, arquivo1.txt e arquivo2.txt, que contêm os seguintes dados -
arquivo1.txt -
apple
banana
orange
arquivo2.txt -
carrot
potato
Você pode usar o Awk para ler dados de ambos os arquivos e imprimi-los na tela usando o seguinte comando -
awk '{print}' file1.txt file2.txt
Este comando diz ao Awk para ler os dados do arquivo1.txt e do arquivo2.txt e imprimi-los na tela. O comando '{print}' é usado para especificar a ação que o Awk deve realizar para cada linha de dados de entrada, neste caso, para imprimi-los na tela.
Combinando dados de vários arquivos de entrada
Outra maneira de usar o Awk com vários arquivos de entrada é combinar dados de arquivos em um único fluxo de saída. Isso pode ser útil se você tiver vários arquivos que contenham dados relacionados e quiser combiná-los em um único conjunto de dados. Para fazer isso, você pode usar o comando cat para concatenar arquivos e, em seguida, canalizar a saída para o Awk.
Por exemplo, suponha que você tenha dois arquivos, arquivo1.txt e arquivo2.txt, que contêm os seguintes dados -
arquivo1.txt -
1,apple
2,banana
3,orange
arquivo2.txt -
1,carrot
2,potato
Você pode usar o seguinte comando para combinar dados de ambos os arquivos em um único fluxo de saída -
cat file1.txt file2.txt | awk -F ',' '{print $1,$2}'
Este comando usa o comando cat para concatenar file1.txt e file2.txt em um único fluxo de saída. o fluxo de saída é então canalizado para o Awk, que é instruído a usar vírgula (',') como separador de campo usando a opção -F. O comando '{print $1,$2}' é usado para imprimir o primeiro e o segundo campos de cada linha de dados de entrada, separados por um espaço.
Processando dados de vários arquivos de entrada -
O processamento de dados de vários arquivos de entrada pode envolver diversas operações, como filtragem, classificação e agregação. Awk fornece uma ampla gama de funções integradas que podem ser usadas para realizar essas operações, tornando-o uma ferramenta poderosa para processamento de dados.
Por exemplo, suponha que você tenha dois arquivos, arquivo1.txt e arquivo2.txt, que contêm os seguintes dados -
arquivo1.txt -
1,apple,0.5
2,banana,0.4
3,orange,0.3
arquivo2.txt -
1,carrot,0.2
2,potato,0.1
Você pode usar o Awk para processar dados de ambos os arquivos e calcular o peso total de todas as frutas e vegetais usando o seguinte 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 a opção -F para especificar vírgula (',') como separador de campo. Em seguida, ele usa uma instrução if para filtrar dados que não sejam de frutas do arquivo2.txt e calcular o peso total de todas as frutas em ambos os arquivos. A variável sum é inicializada em zero e incrementada para cada linha de dados de entrada que corresponde aos critérios da fruta. O bloco END é usado para imprimir o valor final da soma.
Exemplos de uso do Awk com vários arquivos de entrada
Calculando o tamanho total de todos os arquivos em um diretório
Suponha que você queira calcular o tamanho total de todos os arquivos em um diretório e seus subdiretórios. Você pode usar o seguinte comando para gerar uma lista de todos os arquivos no diretório e seus subdiretórios e, em seguida, canalizar a saída para o Awk para calcular o tamanho total -
find /path/to/directory -type f -print0 | xargs -0 ls -l | awk '{sum += $5} END {print sum}'
Este comando usa o comando find para gerar uma lista de todos os arquivos no diretório e seus subdiretórios, e o comando xargs para passar a lista para ls -l para gerar uma lista detalhada de cada arquivo. a saída de ls -l é então canalizada para o Awk, que usa o campo $5 para calcular o tamanho total de todos os arquivos em bytes. O bloco END é usado para imprimir o valor final da soma.
Mesclando dois arquivos CSV
Suponha que você tenha dois arquivos CSV que contêm dados relacionados e queira mesclá-los em um único arquivo CSV. Você pode usar o seguinte comando para mesclar arquivos e gerar o resultado em um novo arquivo:
awk 'FNR==1 && NR!=1 {next;}{print}' file1.csv file2.csv > merged.csv
Este comando usa variáveis integradas FNR e NR para garantir que a linha do cabeçalho seja incluída apenas uma vez no arquivo de saída. o primeiro arquivo é processado normalmente, mas o segundo arquivo é ignorado se o número da linha atual (FNR) for igual a 1 e o número total da linha (NR) não for igual a 1. A saída resultante é então redirecionada para um novo arquivo, merged.csv.
Conclusão
Awk é uma ferramenta poderosa de processamento de texto que pode ser usada para processar vários arquivos de entrada. Ele fornece uma ampla gama de funções integradas que podem ser usadas para manipular dados de diversas maneiras, tornando-o ideal para tarefas de processamento em lote. Ao combinar vários arquivos de entrada, o Awk pode ajudá-lo a agilizar seus fluxos de trabalho de processamento de dados e melhorar a eficiência de suas tarefas de análise de dados.