Eu tenho dois arquivos com alguns nomes, quando executo cat file1 file2 | sort
, o terminal mostra os nomes classificados em ordem alfabética, mas quando executo cat file1 file2 > file3 | sort
não vejo a saída classificada, por quê?
Responder1
Você já redirecionou a saída de file1
e file2
para o novo arquivo file3
.
Com este comando cat file1 file2 > file3 | sort
, sort
após pipe.
Isso pode ser verificado conforme abaixo.
cat file1
A
Z
B
cat file2
F
G
C
Agora, quando executo o comando as, cat file1 file2 > file3 | sort
podemos ver que o conteúdo de file1
e file2
está gravado, file3
mas não está classificado.
Acredito que o que você está tentando alcançar poderia ser facilmente alcançado, pois,
cat file1 file2 | sort > file3
No entanto, não mostra a saída na janela do console.
Se você precisar que a saída de dois arquivos após a classificação seja gravada em um novo arquivo e, ao mesmo tempo, a saída classificada esteja disponível no console, você pode fazer algo como abaixo.
cat file1 file2 | sort > file3; cat file3
Porém, é bom fazer uso tee
neste caso. tee
poderia ser efetivamente usado como,
cat file1 file2 | sort | tee file3
O comando acima basicamente concatena 2 arquivos e os classifica e exibe a saída no console e ao mesmo tempo grava a saída do pipe no novo arquivo especificado usando o tee
comando.
Como usuárioCaseyaponta, se você tiver zsh
shell disponível em seu sistema, você também pode usar o comando abaixo.
sort <file1 <file2 | tee file3
Responder2
POSIX define o sort
propósito do utilitário assim:
Classifique as linhas de todos os arquivos nomeados juntos e grave o resultado na saída especificada.
Você pode classificar dois arquivos em um arquivo de saída concatenado como:
sort $opts file1 file2 >output_file
Se você quiser ver a saída no seu shellstdout
esalve os resultados em um arquivo de saída e use tee
:
sort $opts file[12] | tee output_file