Se o arquivo de entrada é chamado data , uma solução é:
awk '{print>$1}' data
Em awk , o primeiro campo (coluna) é chamado $1 . Os loops acima através de cada linha de entrada ( awk faz isso implicitamente) e escreve essa linha em um arquivo cujo nome é o primeiro campo.
Mais detalhadamente:
-
O comando é colocado entre chaves. Como não há qualificador na frente das chaves, o comando será executado em todas as linhas de entrada.
-
O comando
print, sem argumento, imprimirá toda a linha de entrada. -
O símbolo
>indica o redirecionamento da saída para um arquivo -
O nome do arquivo é especificado como
$1, que, novamente, se refere ao texto que estava no primeiro campo da linha de entrada.
Assim, este comando criará arquivos chamados 60, 61 , etc., que conterão as linhas correspondentes do arquivo de entrada.
Manipulação de conjuntos de dados muito grandes
Por padrão, awk mantém todos os manipuladores de arquivos abertos até que todo o comando seja concluído. Consequentemente, com conjuntos de dados muito grandes, é possível exceder os limites do sistema no número de arquivos abertos. A solução mais simples é usar o append e fechar cada arquivo após a gravação:
awk '{print>>$1; close($1)}' data
Como isso usa >> (append), isso será adicionado aos arquivos de dados existentes, em vez de sobrescrevê-los. Se não for o que você deseja, exclua-os antes de executar este comando.