Pregunta:
Usando la función de tuberías ( |
) en Linux, puedo reenviar la entrada estándar a una o varias secuencias de salida.
Puedo usar tee
para dividir la salida en subprocesos separados.
¿Existe un comando para unir dos flujos de entrada?
¿Cómo haría esto? ¿Cómo funciona diff?
Respuesta:
Personalmente, mi favorito (requiere bash y otras cosas que son estándar en la mayoría de las distribuciones de Linux)
Los detalles pueden depender mucho del resultado de las dos cosas y de cómo desea fusionarlas …
Contenido de command1 y command2 uno después del otro en la salida:
cat <(command1) <(command2) > outputfile
O si ambos comandos generan versiones alternativas de los mismos datos que desea ver uno al lado del otro (lo he usado con snmpwalk; números en un lado y nombres MIB en el otro):
paste <(command1) <(command2) > outputfile
O si desea comparar la salida de dos comandos similares (diga una búsqueda en dos directorios diferentes)
diff <(command1) <(command2) > outputfile
O si son salidas ordenadas de algún tipo, combínelas:
sort -m <(command1) <(command2) > outputfile
O ejecute ambos comandos a la vez (aunque podría alterar un poco las cosas):
cat <(command1 & command2) > outputfile
El operador <() configura una canalización con nombre (o / dev / fd) para cada comando, canalizando la salida de ese comando a la canalización con nombre (o referencia de identificador de archivo / dev / fd) y pasa el nombre en la línea de comandos. Hay un equivalente con> (). Podrías hacer: command0 | tee >(command1) >(command2) >(command3) | command4
para enviar simultáneamente la salida de un comando a otros 4 comandos, por ejemplo.