खाली लाइनों की उपेक्षा
यहाँ एक दृष्टिकोण का उपयोग किया गया है awk:
echo "$TEST" | tac | awk 'f==0 && /./ {f=NR} END{if(f==NR){exit 0}; exit 1 }' && echo "Found A Single Line"
यह काम किस प्रकार करता है:
गूंज "$ टेस्ट"
इसमें जो भी शेल वैरिएबल होता है, उसे हम ले लेते हैं और इसे स्टैंडर्ड आउट पर भेज देते हैं।
tac
यह लाइनों के क्रम को उलट देता है ताकि अंतिम पंक्ति पहले वापस आ जाए। निष्पादित करने के बाद tac, अनुगामी लाइनें अग्रणी रेखाएं बन जाती हैं।
(नाम उस कारण tacके catलिए रिवर्स tacहै जो catकरता है लेकिन रिवर्स में करता है।)
awk 'f==0 && /./ {f=NR} END{if(f==NR){exit 0}; exit 1 }'
यह चर में पहली गैर-रिक्त रेखा की पंक्ति संख्या को संग्रहीत करता है f। सभी लाइनों में पढ़ने के बाद, यह तुलना f, लाइनों की कुल संख्या के NR। यदि fइसके बराबर है NR, तो हमारे पास बस एक ही लाइन थी (प्रारंभिक रिक्त को अनदेखा करते हुए) और हम कोड के साथ बाहर निकलते हैं। 0. यदि पहली रिक्त लाइन के बाद एक या अधिक लाइनें थीं, तो यह कोड `के साथ बाहर निकलता है।
&& echo "Found A Single Line"
यदि awkकोड 0 के साथ बाहर निकलता है, तो echoकथन निष्पादित किया जाता है।
खाली लाइनों के अग्रणी और अनुगामी दोनों को अनदेखा करना
एक अतिरिक्त awkवैरिएबल बनाकर , हम खाली लाइनों की अग्रणी और अनुगामी दोनों को अनदेखा करने के लिए परीक्षण का विस्तार कर सकते हैं:
echo "$TEST" | awk 'first==0 && /./ {first=NR} /./ {last=NR} END{if(first==last){exit 0}; exit 1 }' && echo " Found A Single Line"
क्योंकि awkकोड का यह संस्करण प्रमुख और अनुगामी दोनों रिक्त स्थान को संभालता है, tacअब इसकी आवश्यकता नहीं है।
ले रहा है awkकोड एक समय में एक टुकड़ा:
first==0 && /./ {first=NR}
यदि चर firstशून्य है (या इसे अभी तक सेट नहीं किया गया है) और लाइन में एक चरित्र, कोई भी चरित्र है, तो firstलाइन नंबर पर सेट करें। जब awkलाइनों को पढ़ा जाता है, firstतो पहले गैर-रिक्त लाइन की लाइन संख्या पर सेट किया जाएगा।
/./ {last=NR}
यदि रेखा में कोई वर्ण है, तो चर lastको वर्तमान रेखा संख्या पर सेट करें । जब awkसभी पंक्तियों को पढ़ने के लिए किया जाता है, तो इस चर में अंतिम गैर-रिक्त रेखा की पंक्ति संख्या होगी।
END{if(first==last){exit 0}; exit 1 }
सभी लाइनों को पढ़ने के बाद इसे निष्पादित किया गया। यदि firstबराबर है last, तो हमने शून्य या लाइन को गैर-रिक्त लाइनों के रूप में देखा है और awkकोड के साथ बाहर निकलता है 0। अन्यथा, यह कोड के साथ बाहर निकलता है 1। खोल स्क्रिप्ट के साथ हमेशा की तरह बाहर निकलने के कोड का परीक्षण कर सकते ifबयान या &&या ||।