Com o comando awk
:
mycommand.sh | awk '/A/{ print > "file1" }/B/{ print > "file2" }'
-
/A/{ print > "file1" }
- se um registro corresponder ao padrãoA
print / redirect o registro inteiro emfile1
Existe alguma maneira de redirecionar a saída filtrada para vários arquivos executando mycommand.sh apenas uma vez?
Exemplo de saída deve ser semelhante a isto:
mycommand.sh | grep --line-buffered -B 1 A >> file1 ; my command.sh | grep --line-buffered -A 1 B >> file2
Ou talvez com o egrep de alguma forma ...
Com o comando awk
:
mycommand.sh | awk '/A/{ print > "file1" }/B/{ print > "file2" }'
/A/{ print > "file1" }
- se um registro corresponder ao padrão A
print / redirect o registro inteiro em file1
awk
é uma ferramenta melhor para isso porque é muito mais rápido, não precisa forçar o grep
ou o que quer que seja várias vezes, e pode ser dimensionado facilmente para gravar em qualquer número de arquivos. Idem para a maioria das outras linguagens de script, como perl
ou python
.
No shell, você pode usar tee
e substituição de processos . por exemplo,
mycommand.sh |
tee >(grep --line-buffered -A 1 B >> file2) |
grep --line-buffered -B 1 A >> file1
(extras alimentações de linha e recuo adicionadas para melhorar a legibilidade. funciona tudo em uma linha, se você preferir feio e ilegível)
tee
escreve sua entrada para ambos stdout (por exemplo, para o terminal, redirecionado para um arquivo ou canalizado para o próximo comando na linha de controle) AND para um arquivo especificado na linha de comando.
Nesse caso, esse "arquivo" é um descritor de arquivo fornecido pela substituição do processo (por exemplo, outro comando grep
com saída redirecionada, como no exemplo acima).
tee
pode gravar em vários arquivos de saída (ou descritores de arquivo de substituição de processo) simultaneamente. Por exemplo:
mycommand.sh |
tee >(grep --line-buffered -A 1 B >> file2) \
>(grep --line-buffered -A 1 C >> file3) \
>(grep --line-buffered -A 1 D >> file4) |
grep --line-buffered -B 1 A >> file1
Isso funciona, mas eu pessoalmente usaria algo como awk
answer do @ RomanPerekhrest.
Tags grep io-redirection