मैं एक प्रोग्राम में डेटा को कैसे स्ट्रीम कर सकता हूं जो एक तर्क के रूप में दी गई फ़ाइल से डेटा पढ़ने की उम्मीद करता है?


17

मेरे पास एक बड़ी gzipped फ़ाइल है और मैं इसे पढ़ने के लिए एक प्रोग्राम (4s-import इस मामले में) चाहता हूं। पहले फ़ाइल को अनज़िप करने में बहुत समय लगता है और फिर प्रोग्राम को पथ के साथ तर्क के रूप में फ़ाइल पर कॉल करें। क्या ऐसा करना संभव होगा:

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

जहां SOME-MAGIC एक सार फ़ाइल के लिए एक पथ की तरह है जिसमें स्टड होता है?

बहुत धीमा और अधिक डिस्क स्थान लेने वाला विकल्प जो मुझे अन्यथा करना है:

zcat huge.gz > huger
4s-import huger

जवाबों:


32

आप (या ) की प्रक्रिया प्रतिस्थापन ऑपरेटर <()का उपयोग कर सकते हैं :bashzsh

4s-import <(zcat huge.gz)

यह ऑपरेटर एक अस्थायी फीफो बनाएगा /dev/fd/NNऔर <(.)स्ट्रिंग के साथ बदल देगा /dev/fd/NN4s-importअब /dev/fd/NNउस पंद्रो से खोल सकते हैं और पढ़ सकते हैं , जबकि bashचलेगा zcat huge.gz, जो इसके आउटपुट को भेजता है /dev/fd/NN


17
  1. कई कार्यक्रमों में एक -मानक इनपुट होता है। अगर आपका है, तो इसे "बिलिन" के रूप में उपयोग करें।

  2. आप एक फ़ाइल के रूप में /dev/stdinया उपयोग करके भी देख सकते हैं /dev/fd/0

  3. एक तीसरा विकल्प mkfifoएक विशेष फ़ाइल बनाने के लिए उपयोग करना है। एक शेल में आप अपने डेटा (जैसे। gunzip > your_fifo_file) में पाइप करते हैं, जबकि दूसरे में आप अपने प्रोग्राम को फाइल के रूप में फीफो के साथ कहते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.