আমার কাছে ফাইল আছে যে 100000 লাইন রয়েছে আমি কীভাবে লিনাক্সের নীচে # 5555 লাইন থেকে # 7777 লাইনটি পেতে পারি।
সবাইকে ধন্যবাদ.
আমার কাছে ফাইল আছে যে 100000 লাইন রয়েছে আমি কীভাবে লিনাক্সের নীচে # 5555 লাইন থেকে # 7777 লাইনটি পেতে পারি।
সবাইকে ধন্যবাদ.
উত্তর:
sed '5555,7777!d' <filename>
এটি অন্তর্ভুক্তভাবে ফাইলের 5555-7777 লাইনগুলি মুদ্রণ করবে।
ডেনিস নিম্নলিখিত পোস্ট করেছেন যার সাথে আমি সম্মত তা দ্রুত হওয়া উচিত:
sed '5555,7777p; 7778q' filename
এটি দ্রুত হওয়া উচিত যে নিম্নলিখিত প্রমাণ:
$ n=1
$ while [[ n -le 100000 ]]; do echo $n >> sedtest2; n=$((n + 1)); done
$ strace -e trace=read -o sed1 sed '5555,7777!d' sedtest2
$ strace -e trace=read -o sed2 sed '5555,7777p; 7778q' sedtest2
$ wc -l sed1
149 sed1
$ wc -l sed2
14 sed1
কেবল বাশে (মজাদার জন্য):
n=1
while read line; do
if [[ ($n -ge 5555) && ($n -le 7777) ]]; then
echo $line
elif [[ $n -gt 7777 ]]; then
break
fi
n=$(( $n + 1 ))
done < file
$n -gt 3
সম্ভবত 7777 হওয়া উচিত? এছাড়াও, আপনি if (( n >= 5555 ))
আরও "প্রাকৃতিক" দেখছেন সংখ্যামূলক তুলনা অপারেটর (এবং ডলারের চিহ্ন ছেড়ে দেওয়ার ক্ষমতা) এর জন্য করতে পারেন। এবং আপনি করতে পারেন ((n++))
।
আপনার কাজ শেষ হয়ে গেলে প্রস্থান করা জিনিসগুলিকে দ্রুত করতে পারে:
sed -n '5555,7777p; 7778q' input_file
আমি দেখতে পেলাম যে সেড অপশনটি একটি মাইএসকিলডাম্প ফাইলে কাজ করে না, উদ্ধৃত লাইন ফিড বা মাল্টিবাইট অক্ষর পরিচালনা করার কারণে আমি অনুমান করছি। মাথা এবং লেজটি গ্রেপ হিসাবে একই লাইনের সংখ্যাগুলি ব্যবহার করে এটি টুকরো টুকরো যা আমার প্রয়োজন ছিল। লাইনগুলি $ j এর মাধ্যমে $ কে পেতে আপনার প্রয়োজন:
x=$(( $k - $j + 1 ))
tail -n +$j filename | head -${x}