আপনি যদি X থেকে Y সমেত লাইনগুলি চান (1 তে সংখ্যাটি শুরু করে), ব্যবহার করুন
tail -n +$X /path/to/file | head -n $((Y-X+1))
tail
প্রথম এক্স -১ লাইনগুলি পড়বে এবং ফেলে দেবে (এর আশেপাশে কোনও উপায় নেই), তারপরে নীচের লাইনগুলি পড়ুন এবং মুদ্রণ করুন। head
অনুরোধ করা লাইনগুলির সংখ্যা পড়ুন এবং মুদ্রণ করবেন, তারপরে প্রস্থান করুন। যখন head
প্রস্থান করে, tail
একটি পায় SIGPIPE সংকেত মরে, তাই এটি ইনপুট ফাইল থেকে লাইনের একটি বাফারের আকার এর মূল্য (সাধারণত কয়েক কিলোবাইট) চেয়ে আরও পড়তে হবে না।
বিকল্প হিসাবে, gorkypl পরামর্শ হিসাবে, সেড ব্যবহার:
sed -n -e "$X,$Y p" -e "$Y q" /path/to/file
সেড দ্রবণটি উল্লেখযোগ্যভাবে ধীর হলেও (কমপক্ষে জিএনইউ ইউটিলিটিস এবং ব্যাসিবক্স ইউটিলিটির জন্য; যদি আপনি কোনও ওএসে ফাইলের একটি বৃহত অংশ বের করেন যেখানে পাইপিং ধীর এবং সিড দ্রুত হয়)। এখানে লিনাক্সের অধীনে দ্রুত মাপদণ্ড রয়েছে; ডেটা দ্বারা উত্পাদিত হয়েছিল seq 100000000 >/tmp/a
, পরিবেশটি লিনাক্স / amd64, /tmp
tmpfs এবং মেশিনটি অন্যথায় অলস এবং অদলবদল নয়।
real user sys command
0.47 0.32 0.12 </tmp/a tail -n +50000001 | head -n 10 #GNU
0.86 0.64 0.21 </tmp/a tail -n +50000001 | head -n 10 #BusyBox
3.57 3.41 0.14 sed -n -e '50000000,50000010 p' -e '50000010q' /tmp/a #GNU
11.91 11.68 0.14 sed -n -e '50000000,50000010 p' -e '50000010q' /tmp/a #BusyBox
1.04 0.60 0.46 </tmp/a tail -n +50000001 | head -n 40000001 >/dev/null #GNU
7.12 6.58 0.55 </tmp/a tail -n +50000001 | head -n 40000001 >/dev/null #BusyBox
9.95 9.54 0.28 sed -n -e '50000000,90000000 p' -e '90000000q' /tmp/a >/dev/null #GNU
23.76 23.13 0.31 sed -n -e '50000000,90000000 p' -e '90000000q' /tmp/a >/dev/null #BusyBox
আপনি যে বাইট রেঞ্জের সাথে কাজ করতে চান তা যদি আপনি জানেন তবে সরাসরি শুরুর অবস্থানে এড়িয়ে আপনি এটিকে আরও দ্রুত বের করতে পারবেন। তবে লাইনের জন্য আপনাকে প্রথম থেকেই পড়তে হবে এবং নিউলাইনগুলি গণনা করতে হবে। X এর সমাপ্ত থেকে y এক্সক্লুসিভ থেকে 0 থেকে বি এর ব্লকের আকারের সাথে ব্লকগুলি বের করতে:
dd bs=$b seek=$x count=$((y-x)) </path/to/file