কোনও ফাইল থেকে রেখার নির্দিষ্ট রেঞ্জটি পড়ুন


15

আমার কাছে ফাইল আছে যে 100000 লাইন রয়েছে আমি কীভাবে লিনাক্সের নীচে # 5555 লাইন থেকে # 7777 লাইনটি পেতে পারি।

সবাইকে ধন্যবাদ.

linux  files  sed 


আপনি সেড ব্যবহার করতে চান বা অন্য সরঞ্জামগুলি যদি ঠিক থাকে তবে আপনি সুনির্দিষ্ট করতে পারেন।
মনু এইচ

গবেষণার একটি সামান্য বিট ছোঁড়ার অন্তত stackoverflow.com/questions/83329/...
sancho.s পুনর্বহাল মনিকা

উত্তর:


22
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++))
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

16

আপনার কাজ শেষ হয়ে গেলে প্রস্থান করা জিনিসগুলিকে দ্রুত করতে পারে:

sed -n '5555,7777p; 7778q' input_file

1
+1, দ্রুত হওয়া উচিত, কেন তা দেখানোর জন্য আমার পোস্ট আপডেট করা উচিত।
কাইল ব্র্যান্ডট

7

এর যে কোনও একটিতে কাজ করা উচিত;

  • সেড- এন ' স্টার্টনम्बर , এন্ডনম্বার পি'
  • awk 'NR> = startnumber && R <= endnumber ' ফাইল

উপায় দ্বারা দুর্দান্ত প্রশ্ন;)


1

আমি দেখতে পেলাম যে সেড অপশনটি একটি মাইএসকিলডাম্প ফাইলে কাজ করে না, উদ্ধৃত লাইন ফিড বা মাল্টিবাইট অক্ষর পরিচালনা করার কারণে আমি অনুমান করছি। মাথা এবং লেজটি গ্রেপ হিসাবে একই লাইনের সংখ্যাগুলি ব্যবহার করে এটি টুকরো টুকরো যা আমার প্রয়োজন ছিল। লাইনগুলি $ j এর মাধ্যমে $ কে পেতে আপনার প্রয়োজন:

x=$(( $k - $j + 1 ))
tail -n +$j filename | head -${x} 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.