Cómo concatenar dos archivos en uno nuevo y ordenar la salida en una línea

Cómo concatenar dos archivos en uno nuevo y ordenar la salida en una línea

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 | sortno veo la salida ordenada, ¿por qué?

Respuesta1

Ya ha redirigido la salida de file1y file2al nuevo archivo file3.

Con este comando cat file1 file2 > file3 | sort, sortdespué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 | sortpodemos ver que el contenido de file1y file2está escrito file3pero 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 teeen este caso. teepodrí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 teecomando.

Como usuariocaseyseñala que si tiene zshun shell disponible en su sistema, también puede usar el siguiente comando.

sort <file1 <file2 | tee file3

Respuesta2

POSIX define el sortpropó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

información relacionada