linux - Bash এ প্রথম এক্স লাইন skipping একটি ফাইল প্রিন্ট করুন




printing (9)

AWK এর সাথে একটি কম ক্রিয়াপদ সংস্করণ:

awk 'NR > 1e6' myfile.txt

কিন্তু আমি পূর্ণসংখ্যা সংখ্যা ব্যবহার করে সুপারিশ করবে।

আমার কাছে একটি দীর্ঘ ফাইল রয়েছে যা আমি মুদ্রণ করতে চাই কিন্তু উদাহরণস্বরূপ প্রথম 1e6 লাইন এড়িয়ে যাচ্ছি। আমি বিড়ালের মানুষ পৃষ্ঠায় দেখি কিন্তু এটি করার জন্য আমি কোন বিকল্প দেখিনি। আমি এই বা একটি সহজ bash প্রোগ্রাম করতে একটি কমান্ড খুঁজছেন।


আপনি মাথা এবং লেজ কমান্ড ব্যবহার করে এটি করতে পারেন:

head -n <num> | tail -n <lines to print>

যেখানে num হল 1e6 + লাইন সংখ্যা যা আপনি মুদ্রণ করতে চান।


আপনি লেজ প্রয়োজন হবে। কিছু উদাহরণ:

$ tail great-big-file.log
< Last 10 lines of great-big-file.log >

আপনি যদি সত্যিই "প্রথম" লাইনগুলির একটি বিশেষ সংখ্যা SKIP করতে চান, ব্যবহার করুন

$ tail -n +<N+1> <filename>
< filename, excluding first N lines. >

অর্থাৎ, যদি আপনি N লাইনগুলি এড়িয়ে যেতে চান তবে আপনি মুদ্রণ লাইন N + 1 শুরু করুন। উদাহরণ:

$ tail -n +11 /tmp/myfile
< /tmp/myfile, starting at line 11, or skipping the first 10 lines. >

আপনি যদি শেষ কয়েকটি লাইন দেখতে চান তবে "+" বাদ দিন:

$ tail -n <N> <filename>
< last N lines of file. >

আমি একই কাজ করতে এবং এই থ্রেড পাওয়া প্রয়োজন।

আমি চেষ্টা করেছি "tail-n +, কিন্তু এটি শুধু সবকিছু মুদ্রিত।

আরো + লাইন প্রম্পটে চমত্কারভাবে কাজ করেছে, কিন্তু এটি হেডলেস মোড (cronjob) চালানোর সময় এটি সম্পূর্ণ ভিন্ন আচরণ।

আমি অবশেষে এই নিজেকে লিখেছেন:

skip=5
FILE="/tmp/filetoprint"
tail -n$((`cat "${FILE}" | wc -l` - skip)) "${FILE}"

একটি পরিসীমা ঠিকানা সঙ্গে sed মোড কমান্ড ব্যবহার করুন। উদাহরণ স্বরূপ:

$ sed 1,100d file.txt # Print file.txt omitting lines 1-100.

বিকল্পভাবে, যদি আপনি শুধুমাত্র পরিচিত পরিসরটি মুদ্রণ করতে চান তবে -n পতাকা দিয়ে মুদ্রণ কমান্ডটি ব্যবহার করুন:

$ sed -n 201,300p file.txt # Print lines 201-300 from file.txt

জিএনইউ ইউটিলিটির উপস্থিতি সত্ত্বেও এই সমাধানটি সমস্ত ইউনিক্স সিস্টেমে নির্ভরযোগ্যভাবে কাজ করা উচিত।


ফাইলটির প্রথম দশটি লাইনগুলি সরানোর সবচেয়ে সহজ উপায়:

$ sed 1,10d file.txt

যদি আপনি প্রথম দুই লাইন এড়িয়ে যেতে চান
tail -n +3 <filename>

যদি আপনি প্রথম এক্স লাইন এড়িয়ে যেতে চান
tail -n +$((x+1)) <filename>


শুধু একটি sed বিকল্প প্রস্তাব। :) প্রথম দশ লক্ষ লাইন বাদ দিতে চেষ্টা করুন |sed '1,1000000d'

উদাহরণ:

$ perl -wle 'print for (1..1_000_005)'|sed '1,1000000d'
1000001
1000002
1000003
1000004
1000005

sed -n '1d;p'

এই কমান্ডটি প্রথম লাইন মুছবে এবং বাকিটি মুদ্রণ করবে





skip