Awk divide o arquivo grande condicionalmente em vários arquivos de saída

0

Eu tenho que dividir um arquivo de 90 GB em vários arquivos condicionalmente (o arquivo é um arquivo de várias tabelas para dividir por uma única tabela).

Eu criei uma solução em ksh e awk que roda nas regras da tabela e com o awk seleciona se deseja imprimir no arquivo de saída ou não. O problema é que para 29 regras eu tenho que ler o arquivo fonte (90 GB) 29 vezes.

É possível escrever em vários arquivos com uma única leitura do arquivo de origem, redirecionando em uma ou outra saída condicionalmente?

    
por hsstan 30.06.2015 / 07:09

1 resposta

3

Você pode usar o redirecionamento (ele é especificado por POSIX, portanto, deve estar disponível com outros problemas). Um exemplo simples:

$ awk '$1 % 2 {print > "odd"; next} {print > "even"}' <(seq 1 10)
$ tail -n +1 odd even                                            
==> odd <==
1
3
5
7
9

==> even <==
2
4
6
8
10

Então, você poderia criar um array com 29 nomes de arquivos, ou construí-los usando variáveis ( print > "filenum" n , n sendo algum contador), ou ...

    
por 30.06.2015 / 07:46

Tags