जवाबों:
headकिसी फ़ाइल से पहली लाइनें लेता है, और -nपैरामीटर का उपयोग यह निर्दिष्ट करने के लिए किया जा सकता है कि कितनी लाइनें निकाली जानी चाहिए:
line=$(head -n 1 filename)
line="$(head -1 FILENAME)"
line=`head -1 FILENAME`
head...रूप में $()करता है के रूप में एक उपखंड के चारों ओर backticks करता है ?.
$()वाक्य रचना देखने में आसान है, और निरपेक्षता पर स्पष्टता है। gnu.org/software/bash/manual/html_node/…
बैश का उपयोग करके पहली पंक्ति पढ़ने के लिए, readकथन का उपयोग करें । जैसे
read -r firstline<file
firstline आपका चर होगा (दूसरे को असाइन करने की आवश्यकता नहीं है)
cat ... | read VARअधिकांश गोले में विफल हो जाएगा ( zshजहां तक मुझे पता है) को छोड़कर सभी क्योंकि एक पाइप में प्रत्येक घटक अलग-अलग उपधाराओं में चलेगा। अर्थ यह है कि $VARइनवॉइस शेल के बजाय सब-सेट में सेट किया जाएगा (जैसे ही पाइप लाइन समाप्त होते ही मौजूद हो जाएगा)। आप इसके साथ read VAR <<EOF\n$(cat ...)\nEOF(जहां प्रत्येक \nएक नई पंक्ति है) इसके चारों ओर प्राप्त कर सकते हैं ।
catशुद्ध उपरि है; किसी भी तरह read -r var <fileसे अधिक कुशल cat file | read, भले ही बादशाह BashFAQ # 24 में वर्णित कारणों के लिए विफल नहीं हुआ ।
cat, तोread -r var < <(otherprog ...)
यह filenameपरिवर्तनशील है और चर की पहली पंक्ति को संग्रहीत करता है $line:
read -r line < filename
मुझे यह भी पसंद awkहै:
awk 'NR==1 {print; exit}' file
लाइन को स्टोर करने के लिए, var=$(command)सिंटैक्स का उपयोग करें । इस मामले में, line=$(awk 'NR==1 {print; exit}' file)।
या यहां तक कि sed:
sed -n '1p' file
समकक्ष के साथ line=$(sed -n '1p' file)।
एक नमूना देखें जब हम readसाथ भोजन करते हैं seq 10, अर्थात 1 से 10 तक संख्याओं का क्रम:
$ read -r line < <(seq 10)
$ echo "$line"
1
$ line=$(awk 'NR==1 {print; exit}' <(seq 10))
$ echo "$line"
1
sed '1!d;q'(या sed -n '1p;q') आपके awkतर्क की नकल करेगा और फ़ाइल में आगे पढ़ने से रोकेगा। क्योंकि हम केवल पहली पंक्ति चाहते हैं, हम वैकल्पिक रूप से sed qया ( awk '1;{exit}'या grep -m1 ^कम कोड, समान आवश्यक तर्क) के साथ धोखा कर सकते हैं । (यह डाउनवोट पूछताछ का जवाब नहीं है।)
grepबहुत स्मार्ट के साथ एक पाते हैं । हम भी निश्चित रूप से कह सकते हैं head -n 1 file।
head -n1तेज होगा (लोड करने के लिए छोटा बाइनरी) और readसबसे तेज होगा (लोड करने के लिए कोई बाइनरी नहीं, यह एक बिलिन है)। मुझे विशेष रूप से पसंद है grep -m1 --color .जब मैं सिर्फ पहली पंक्ति को प्रिंट कर रहा हूं क्योंकि यह लाइन को भी रंग देगा, जिससे यह तालिका शीर्षकों के लिए बहुत अच्छा होगा।
line=$(head -1 file)
ठीक काम करेंगे। (पिछले जवाब के रूप में)। परंतु
line=$(read -r FIRSTLINE < filename)
readबिल्ट-इन बैश कमांड के रूप में थोड़ी तेजी से होगा ।
readकुछ भी प्रिंट नहीं करता है (इसलिए lineखाली हवाएं), और एक सबशेल में भी निष्पादित होता है (इसलिए FIRSTLINEयह पहली पंक्ति में सेट हो जाता है, लेकिन केवल उपधारा में, इसलिए यह बाद में उपलब्ध नहीं है)। समाधान: सिर्फ उपयोग करेंread -r line <filename
सवाल यह नहीं पूछा गया कि कौन सा सबसे तेज़ है, लेकिन sed जवाब में जोड़ने के लिए, -n '1p' बुरी तरह से प्रदर्शन कर रहा है क्योंकि पैटर्न स्पेस अभी भी बड़ी फ़ाइलों पर स्कैन किया गया है। जिज्ञासा से मैंने पाया कि 'सिर' सेड पर अधिक जीतता है:
# best:
head -n1 $bigfile >/dev/null
# a bit slower than head (I saw about 10% difference):
sed '1q' $bigfile >/dev/null
# VERY slow:
sed -n '1p' $bigfile >/dev/null
readदृष्टिकोण की तुलना में बहुत अधिक उपरि ।$()एक उपखंड बंद कर देता है, और एक बाहरी कमांड ( किसी भी बाहरी कमांड) का उपयोग करने का मतलब है कि आप कॉल कर रहे हैंexecve(), लिंकर और लोडर को आमंत्रित कर रहे हैं (यदि यह साझा पुस्तकालयों का उपयोग कर रहा है, जो आमतौर पर मामला है), आदि