উত্তর:
head
একটি ফাইল থেকে প্রথম লাইন নেয়, এবং -n
প্যারামিটারটি কতগুলি লাইন বের করা উচিত তা নির্দিষ্ট করতে ব্যবহৃত হতে পারে:
line=$(head -n 1 filename)
line="$(head -1 FILENAME)"
line=`head -1 FILENAME`
head...
খোলা $()
আছে?
$()
দেখতে পাই যে বাক্য গঠনটি দেখতে সহজ, এবং নিখুঁত স্বচ্ছতার উপর মূল্য স্পষ্টতা। 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
প্রশ্নটি কোনটি দ্রুত, এটি জিজ্ঞাসা করা হয়নি, তবে সিডের উত্তর যুক্ত করতে, -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()
লিঙ্কার এবং লোডারকে আহ্বান করছেন (যদি এটি ভাগ করে নেওয়া লাইব্রেরিগুলি ব্যবহার করা হয়, যা সাধারণত ক্ষেত্রে হয়) ইত্যাদি।