2012-03-26 10 views
5

मेरे पास एक इनपुट स्ट्रीम है, और मैं आउटपुट लाइनों में "मैप" करना चाहता हूं। उदाहरण के लिए, अगर मेरे इनपुट स्ट्रीम फ़ाइलों nums थे, मैं चाहता हूँ चाहते हैं कि इस वाक्यक्या लाइन द्वारा 'मैपिंग' के लिए एक यूनिक्स कमांड लाइन उपयोगिता है?

$ cat nums 
9534 
2343 
1093 
7023 
$ cat nums | map ./myscript $0 

आप यह करने के लिए एक पार्टी स्क्रिप्ट इस्तेमाल कर सकते हैं

$ echo 9534 | ./myscript 
$ echo 2343 | ./myscript 
$ echo 1093 | ./myscript 
$ echo 7023 | ./myscript 

उत्तर

5

मुझे लगता है कि xargs अपने काल्पनिक map के निकटतम बात है:

cat nums | xargs -n1 ./myscript 

या

cat nums | xargs -n1 -J ARG ./myscript ARG 

या

cat nums | xargs -I ARG ./myscript ARG 

दुर्भाग्य से, xargs आप चीजों को आह्वान करते हैं यह नहीं है कि stdin से पढ़ें, तो आप होगा stdin से पढ़ने के बजाय कमांड लाइन तर्क स्वीकार करने के लिए अपनी स्क्रिप्ट को फिर से लिखना।

+0

विशेष रूप से, मेरे पास एक टेक्स्ट फ़ाइल है जहां अधिकांश लाइनें आईपी पते हैं, और प्रत्येक के लिए, मैं wget कमांड निष्पादित करना चाहता हूं और टेक्स्ट की उस पंक्ति को wget से प्रतिक्रिया पाठ के साथ प्रतिस्थापित करना चाहता हूं। –

+0

आह, अच्छा! मुझे नहीं पता था कि आप प्रति पंक्ति तर्कों की संख्या सीमित करने के लिए '-n1' स्विच का उपयोग कर सकते हैं। –

+0

आप जीएनयू समानांतर को भी देखना चाहते हैं, जो मानक यूनिक्स उपयोगिता नहीं है, लेकिन यह 'xargs' के समान है: http://en.wikipedia.org/wiki/Parallel_(software) –

0

के बराबर होगा। कुछ की तरह:

#!/bin/bash 

string="| ./myscript" 

echo "9534 $string" 
echo "2343 $string" 
echo "1093 $string" 
echo "7023 $string" 

या, आप आसानी से अपने संख्यात्मक मूल्यों के साथ एक सरणी भर सकूं और बस सब एक पाश में यह करते हैं।

+0

मुझे पता है, लेकिन मैं लाइन से विश्लेषण करने के लिए एक रास्ता की उम्मीद कर रहा था। –

+0

मुझे पता है कि पुरानी टेक्स्ट-आधारित कमांड-लाइन गेम होते थे जो आपने कुछ के बारे में बात की थी। इसके अलावा, मुझे लगता है कि, VI और EMACS जो भी आप चाहते हैं वह करने में सक्षम होना चाहिए। – theJollySin

3
#!/bin/bash 
while read -r line 
do 
    "[email protected]" <<< "$line" 
done 
+0

दरअसल, एक साधारण स्क्रिप्ट होगी मैं जो बात कर रहा हूँ वह करो। मैं उत्सुक था, हालांकि, अगर एक कमांड लाइन उपयोगिता मौजूद है। –

संबंधित मुद्दे