शेल कमांड के आउटपुट की पहली पंक्ति प्राप्त करें


96

के संस्करण संख्या को पढ़ने की कोशिश करते समय vim, मुझे बहुत अधिक अतिरिक्त लाइनें मिलती हैं, जिन्हें मुझे अनदेखा करने की आवश्यकता होती है। मैंने headनिम्नलिखित निर्देश को पढ़ने की कोशिश की:

vim --version | head -n 1

मैं जानना चाहता हूं कि क्या यह सही तरीका है?


4
यह कैसे असफल हुआ? इससे मेरा काम बनता है।
चोरोबा

1
सिंटेक्स सही है। क्या त्रुटि है ..?
कौशिक नायक

1
यह मेरे लिए काम करता है, लेकिन शायद आप vim के एक संस्करण का उपयोग कर रहे हैं जो stderr के लिए संस्करण जानकारी लिखता है। कोशिश करेंvim --version 2>&1 | sed 1q
विलियम पर्ससेल

मेरे लिए भी काम करता है - तो हाँ, आपका दृष्टिकोण सही है :)कि क्या आपका पैकेज उस जानकारी stderrको @illiamiamurs के रूप में आउटपुट करता है, जिसके लिए वह चेक प्रदान करता है।
डेविड सी। रैंकिन

जवाबों:


132

हां, यह एक कमांड से आउटपुट की पहली पंक्ति प्राप्त करने का एक तरीका है।

यदि कमांड मानक त्रुटि के लिए कुछ भी आउटपुट करता है जिसे आप उसी तरीके से कैप्चर करना चाहते हैं, तो आपको कमांड की मानक त्रुटि को मानक आउटपुट स्ट्रीम पर पुनर्निर्देशित करने की आवश्यकता है:

utility 2>&1 | head -n 1

पहली पंक्ति को भी पकड़ने के कई अन्य तरीके हैं, जिनमें sed 1q(पहली पंक्ति के बाद छोड़ना), sed -n 1p(केवल पहली पंक्ति को प्रिंट करें, लेकिन सब कुछ पढ़ें), awk 'FNR == 1'(केवल पहली पंक्ति को प्रिंट करें, लेकिन फिर से, सब कुछ पढ़ें) आदि।


4

मै इस्तेमाल करूंगा:

awk 'FNR <= 1' file_*.txt

जैसा कि @ कुसलानंद बताते हैं कि कमांड लाइन में पहली पंक्ति को पकड़ने के कई तरीके हैं लेकिन head -n 1वाइल्डकार्ड का उपयोग करते समय सबसे अच्छा विकल्प नहीं हो सकता है क्योंकि यह अतिरिक्त जानकारी प्रिंट करेगा। पहली i लाइनों को प्राप्त 'FNR == i'करने की 'FNR <= i'अनुमति देने के लिए बदलना ।

उदाहरण के लिए, यदि आपके पास file_1.txt नाम की n फाइलें हैं, तो ... file_n.txt:

awk 'FNR <= 1' file_*.txt

hello
...
bye

लेकिन headवाइल्डकार्ड के साथ फाइल का नाम प्रिंट करें:

head -1 file_*.txt

==> file_1.csv <==
hello
...
==> file_n.csv <==
bye

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