2013-12-16 4 views
8

एक स्क्रिप्ट का हिस्सा जो मैं लिख रहा हूं, उसी स्ट्रिंग के लिए विभिन्न टेक्स्ट फ़ाइलों की जांच करने की आवश्यकता है। इससे पहले कि मुझे सिर्फ एक फ़ाइल जांचनी पड़े, इसलिए मेरे पास केटोगीज़ के भीतर स्ट्रिंग्स की एक लंबी सूची थी, जिसे वेरिएबल्स के रूप में परिभाषित किया गया था। बाद में लिपि में variabled कहा जाता है और स्क्रीन पर उत्पादन कर रहे हैं कि क्या कोई मुकाबला नहीं है:क्या 'if' कथन में एकाधिक कमांड पाइप करना संभव है?

category_1=$(sudo zcat myfile | egrep -c 'Event 1|Event 2|Event 3') 

category_2=$(sudo zcat myfile | egrep -c 'Event 4|Event 5|Event 6') 

category_3=$(sudo zcat myfile | egrep -c 'Event 7|Event 8|Event 9') 

... 

echo Category 1 

if [[ $category_1 -ge 2 ]];then 

      echo There were $category_1 events 

elif [[ $category_1 -eq 1 ]]; then 

      echo There was $category_1 event 

fi 

आदि, आदि ...

अब मैं इतना है कि मैं grepped जांच कर सकते हैं उसे बदलना चाहते हैं एकाधिक पाठ फ़ाइलों के खिलाफ तार। मैं कोई लाभ नहीं हुआ ग्रेप चर के साथ बयान करता है, तो में चर और उन्हें पाइप के रूप में नई फ़ाइलें परिभाषित करने के लिए कोशिश की है:

category_1=$(egrep -c 'Event 1|Event 2|Event 3') 

category_2=$(egrep -c 'Event 4|Event 5|Event 6') 

category_3=$(egrep -c 'Event 7|Event 8|Event 9') 


myfile=$(sudo zcat myfile) 

myfile2=$(sudo zcat myfile2) 

myfile3=$(sudo zcat myfile3) 

... 

echo Category 1 - Myfile 



if [[ myfile | $category_1 -ge 2 ]];then 

      echo There were $category_1 events in myfile 

elif [[ myfile | $category_1 -eq 1 ]]; then 

      echo There was $category_1 event in myfile 

fi 

ऐसा लगता है कि मैं यह कर सकते हैं एक अगर बयान में नहीं पाइप आदेशों।

उत्तर

11

उपयोग $(...) एक स्ट्रिंग में एक आदेश के उत्पादन में कब्जा करने के लिए:

if [[ $(sudo zcat myfile1 | egrep -c 'Event 1|Event 2|Event 3') -ge 2 ]] ; then 
+0

क्या यह संभव है 'egrep' कमांड को एक चर के रूप में सेट करने के लिए ताकि मुझे प्रत्येक कमांड में 'इवेंट 1' आदि डालना पड़े? तो यह grepvariable1 = $ egrep -c 'इवेंट 1 | इवेंट 2 | इवेंट 3'आईफ़ [[$ (सुडो जेकैट myfile1 | grepvariable1) -ge 2]] की तरह होगा; तो – Hxwk

+0

@Hxwk: आप उस फ़ंक्शन को परिभाषित कर सकते हैं जिसमें वह कोड शामिल है जिसे आप दोहराना चाहते हैं। – choroba

+0

मुझे सही दिशा में इंगित करने के लिए धन्यवाद, मैं – Hxwk

0

आप if में पाइप का उपयोग कर सकते हैं, लेकिन आप दो चीजों मिश्रण। आप पाइप के साथ $category_1 का उपयोग करते हैं; और $category_1 एक आदेश नहीं है। आप चर के बजाय कमांड प्रतिस्थापन का उपयोग कर सकते हैं।

if [[ `sudo zcat myfile | egrep -c 'Event 1|Event 2|Event 3')` -ge 2 ]];then 

और इसी तरह।

आप आदेशों के बजाय चर का भी उपयोग कर सकते हैं, लेकिन यह थोड़ा अजीब होगा।

0

आप के बजाय इस तरह के रूप में एक आदेश का उपयोग कर सकते हैं: अगर [ "$ घर" = "अच्छा"] || [ "$ घर" = "बुरा"] फिर ... काम करने के लिए

+2

कार्यों में देखता हूं यदि यह समझाया गया कि यह कैसे काम करता है और यह क्या करता है, तो यह अधिक उपयोगी होगा, कृपया उत्तर देने के बारे में [सहायता] पृष्ठ पढ़ें। – AdrianHHH

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