Come posso trasmettere i dati a un programma che prevede di leggere i dati da un file che viene fornito come argomento?


17

Ho un enorme file gzip e voglio un programma (4s-import in questo caso) per leggerlo. Ci vuole molto tempo per decomprimere prima il file e quindi chiamare il programma con il percorso del file come argomento. Sarebbe possibile fare qualcosa del tipo:

zcat huge.gz | 4s-import <SOME MAGIC>

dove SOME-MAGIC è come un percorso di un file astratto che contiene stdin?

L'alternativa molto più lenta e che richiede più spazio su disco che devo fare altrimenti è:

zcat huge.gz > huger
4s-import huger

Risposte:


32

È possibile utilizzare l'operatore <()di sostituzione del processo di bash(o zsh):

4s-import <(zcat huge.gz)

Questo operatore creerà un FIFO temporaneo /dev/fd/NNe lo sostituirà <(.)con la stringa /dev/fd/NN. 4s-importora può aprire /dev/fd/NNe leggere da quel Fifo, mentre bashverrà eseguito zcat huge.gz, che invia il suo output a /dev/fd/NN.


17
  1. Molti programmi hanno un -input standard. Se il tuo lo fa, usalo come è "incorporato".

  2. Puoi anche provare a utilizzare /dev/stdino /dev/fd/0come file.

  3. Una terza opzione è quella di utilizzare mkfifoper creare un file speciale Fifo. In una shell inserisci i tuoi dati (ad es. gunzip > your_fifo_file), Mentre nell'altra chiami il tuo programma con il file FIFO come file.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.