Tengo dos archivos con algunos nombres, cuando ejecuté cat file1 file2 | sort
, la terminal muestra los nombres ordenados alfabéticamente, pero cuando ejecuto cat file1 file2 > file3 | sort
no veo la salida ordenada, ¿por qué?
Respuesta1
Ya ha redirigido la salida de file1
y file2
al nuevo archivo file3
.
Con este comando cat file1 file2 > file3 | sort
, sort
después de pipe.
Esto podría verificarse como se muestra a continuación.
cat file1
A
Z
B
cat file2
F
G
C
Ahora, cuando ejecuto el comando as, cat file1 file2 > file3 | sort
podemos ver que el contenido de file1
y file2
está escrito file3
pero no está ordenado.
Creo que lo que está tratando de lograr podría lograrse con bastante facilidad ya que,
cat file1 file2 | sort > file3
Sin embargo, no muestra el resultado en la ventana de la consola.
Si necesita que la salida de dos archivos después de ordenarlos se escriba en un archivo nuevo y, al mismo tiempo, la salida ordenada esté disponible en la consola, puede hacer algo como lo siguiente.
cat file1 file2 | sort > file3; cat file3
Sin embargo, es bueno utilizarlo tee
en este caso. tee
podría usarse efectivamente como,
cat file1 file2 | sort | tee file3
El comando anterior básicamente concatena 2 archivos, los ordena y muestra el resultado en la consola y al mismo tiempo escribe el resultado de la tubería en el nuevo archivo especificado usando el tee
comando.
Como usuariocaseyseñala que si tiene zsh
un shell disponible en su sistema, también puede usar el siguiente comando.
sort <file1 <file2 | tee file3
Respuesta2
POSIX define el sort
propósito de la utilidad de la siguiente manera:
Ordene las líneas de todos los archivos nombrados juntos y escriba el resultado en la salida especificada.
Puede ordenar dos archivos en un archivo de salida concatenado como:
sort $opts file1 file2 >output_file
Si desea ver el resultado en su shellstdout
yguarde los resultados en un archivo de salida y luego use tee
:
sort $opts file[12] | tee output_file