Você pode usar a substituição de processos , que é mais idiomática e menos trabalhosa do que um canal nomeado.
cat header.sql <(zcat bigfile.gz | tail -n+50)
Eu tenho um grande arquivo mysqldump gzipado que contém algumas definições de tabela e muitas instruções de inserção. Gostaria de editar as definições da tabela, mas deixar as instruções de inserção sozinhas. O arquivo tem cerca de 500gb quando é compactado, então eu gostaria de evitar soltá-lo apenas para editá-lo. Para pular o cabeçalho eu pude fazer
zcat bigfile.gz | tail -n+50
E apenas adicionar o cabeçalho a outro arquivo compactado que eu posso fazer
zcat header.gz bigfile.gz
Mas existe alguma maneira de combinar essas duas afirmações?
Você pode usar a substituição de processos , que é mais idiomática e menos trabalhosa do que um canal nomeado.
cat header.sql <(zcat bigfile.gz | tail -n+50)
Acabei usando um pipe nomeado para resolver este problema e três shells (via tmux):
Primeiro,
mkfifo pipe
Inicie o shell 1:
cat header.sql > pipe
Em seguida, inicie o shell 2:
zcat bigfile.gz | tail -n+50 > pipe
Em seguida, inicie o shell 3
cat pipe | mysql -uroot -pxyz database_name