লেজের বিপরীতে: সর্বশেষ এন রেখা বাদে সমস্ত লাইন


36

আমি কীভাবে কোনও ইউনিক্স কমান্ড লাইন ফিল্টার সহ কোনও ফাইলের শেষ এন লাইনগুলি বাতিল করতে পারি?

এটি এর বিপরীত ধরণের হবে tail: tailপ্রথম এন লাইনগুলি বাতিল করে তবে বাকীগুলিকে পাইপ দেয় তবে আমি আদেশটি শেষ এন লাইনগুলি বাদ দিয়ে সমস্ত কিছু পাইপ করতে চাই ।

দুর্ভাগ্যক্রমে আমি এর মতো কিছুই পাইনি - headসাহায্যও করে না। সম্পাদনা : কমপক্ষে সোলারিতে এটি নেতিবাচক যুক্তি গ্রহণ করে না।

আপডেট: আমি বেশিরভাগই এমন একটি সমাধানে আগ্রহী যা বড় ফাইলগুলির জন্য কাজ করে, অর্থাৎ লগফাইলে, যেখানে আপনি শেষ মুহুর্তে যা ঘটেছিল তা পরীক্ষা করতে চাইতে পারেন।


এফওয়াইআই যখন মাথা ব্যবহার করে: -n বিকল্পের সাথে সংখ্যার সামনে '-' স্থাপন করে, এটি প্রতিটি ফাইলের সমস্ত লাইন প্রিন্ট করে তবে নীচের মতো দেখানো শেষ এন-লাইন নয়,
জি কো

উত্তর:


38

আপনার যদি জিএনইউ থাকে তবে headআপনি এটি ব্যবহার করতে পারেন

head -n -5 file.txt

শেষ 5 লাইন ছাড়া সব মুদ্রণ file.txt

যদি head -nকোনও নেতিবাচক যুক্তি না নেয় তবে চেষ্টা করুন

head -n $(( $(wc -l file.txt | awk '{print $1}') - 5 )) file.txt

11
(এবং প্রার্থনা করুন যা file.txtকমপক্ষে ছয় লাইনের দীর্ঘ ...)
সিভিএন

1
দুঃখজনকভাবে এই নন-জিএনইউ সংস্করণটি স্ট্রিমগুলির সাথে কাজ করে না,
আরমান্ড

1
@ মাইকেলKjörling কমপক্ষে উবুন্টুতে, এটি কোনও সমস্যা নয়। যদি ফাইলগুলিতে উল্লিখিতের চেয়ে কম লাইন থাকে তবে headকোনও ত্রুটি না করে একটি খালি আউটপুট ফিরে আসে।
আলফায়া

আমি যদি ভুল করে দেখি না - এন 5 প্রথম 5 টি লাইন মুদ্রণ করবে, সমস্ত শেষ নয় 5 ...
পাইপম্যানেটজিজ

8
head file.txt               # first 10 lines
tail file.txt               # last 10 lines
head -n 20 file.txt         # first 20 lines
tail -n 20 file.txt         # last 20 lines
head -20 file.txt           # first 20 lines
tail -20 file.txt           # last 20 lines
head -n -5 file.txt         # all lines except the 5 last
tail -n +5 file.txt         # all lines except the 4 first, starts at line 5

1
এটি কী যুক্ত করে যা গৃহীত উত্তরে উত্তর দেওয়া হয়নি? এছাড়াও, আপনার অন্যান্য উত্তরগুলির মতো, আপনার উত্তরটি ব্যাখ্যা করার কয়েকটি লাইন এটির ব্যাপক উন্নতি করবে।
music2myear

1
খুব ভাল সংক্ষিপ্তসার
রুয়ানাহাও

5

শেষ লাইনটি বিএসডি ইত্যাদিতে মুছে ফেলার একটি সহজ উপায় এখানে

sed '$d' input.txt

এক্সপ্রেশনটি "শেষ লাইনে, এটি মুছুন" পড়ছে। অন্যান্য লাইনগুলি মুদ্রণ করা হবে, যেহেতু sedএটির ডিফল্ট আচরণ।

আপনি একসাথে একাধিক লাইন সরানোর জন্য চেইন করতে পারেন

sed '$d' input.txt | sed '$d' | sed '$d'

যা কিছুটা ভারী হাতে, স্বীকারোক্তিযুক্ত, তবে ফাইলটির মাধ্যমে কেবল একটি স্ক্যান করে।

আরও উত্তরের জন্য আপনি এটিও একবার দেখতে পারেন: https://stackoverflow.com/questions/13380607/how-to-use-sed-to-remove-last-n-lines-of-a-file

এখানে আমার পছন্দের একটির সাথে অভিযোজিত একটি ওয়ান-লাইনার এখানে রয়েছে:

N=10
sed -n -e ':a' -e "1,$N!{P;N;D;};N;ba"

আমি Nএটিকে বোঝাতে মজা পেয়েছি এবং আমি আশা করি আপনিও এটি করবেন (: এটি স্ক্যান করার সাথে সাথে এটি বাফার লাইনগুলি করে তবে অন্যথায় এটি বেশ দক্ষ।


3

আমি কেন আগ্রহী যে আপনি কেন headবিকল্প হিসাবে বিবেচনা করছেন না:

~$ man head
...
-n, --lines=[-]K
        print the first K lines instead of the first 10; 
        with the leading `-', print all but the last K lines of each file

এটি আপনার উদ্দেশ্যটির সাথে খাপ খায়, উদাহরণস্বরূপ:

head -n -20 yourfile.txt

5
মনে রাখবেন এটি কেবল জিএনইউতে প্রযোজ্য head। বিএসডির headএই বিকল্প নেই, সুতরাং এই উত্তরটি জিএনইউ কোর্টিলগুলি ছাড়া সোলারিস বা অন্যান্য ইউনিক্সে কাজ করবে না । ওপি বিশেষত ইউনিক্স এবং ইউনিক্স-ইউটিসগুলির সাথে এটি ট্যাগ করেছে।
slhck

2
@ এসএলএইচএইচসি ওপিতে উল্লেখ করেছেন যে এটি সোলারির পক্ষে mention
একটি সিভিএন

দুর্ভাগ্যক্রমে কেউ সোলারিসের বিষয়ে আমার উল্লেখ সরিয়ে দিয়েছে। তবে আমার যেভাবেই উল্লেখ করা উচিত ছিল যে হেডের সংস্করণ এটি সমর্থন করে না।
হ্যান্স-পিটার স্টার

1
সবাই দুঃখিত। সোলারিস খেয়াল করেনি, না মাথার বিভিন্ন সংস্করণ সম্পর্কে আমি অবগত ছিলাম।
অ্যান্ডারস আর বাইস্ট্রপ

1
@hstoerr সোলারিস এখন আপনার ট্যাগগুলিতে রয়েছে :)
শে

0

tail -nনেতিবাচক যুক্তি না নিলে এটি করার আরেকটি উপায়

tac file.txt | tail -n +6 | tac

এটি শেষ 5 টি লাইন সরিয়ে ফেলবে


ধন্যবাদ! এটি একটি নিফটির ধারণা এখন পর্যন্ত কেউ এলো না। দুর্ভাগ্যক্রমে এই প্রশ্নটির সাথে আমার মনে রাখা ইউজকেসেসের জন্য এটি যথেষ্ট অকার্যকর হবে: যদি এটি একটি বৃহত ফাইল হয় তবে এটি অন্যান্য সমাধানগুলির মতো কেবল এক বা একাধিকবার পুরোপুরি পড়তে হবে না, তবে সম্ভবত এটি লিখিতও হবে টেকের মাধ্যমে অস্থায়ী ফাইলগুলিতে ডিস্ক করুন যদি এটি মেমরির সাথে খাপ খায় না।
হান্স-পিটার স্টার

@ হান্স-পিটার খুব সত্য। এটির জন্য পাইথন 3 স্ক্রিপ্ট লেখার সিদ্ধান্ত নিয়েছে। এই github.com/atw31337/donkey ব্যবহার করে দেখুন । আমি আউটপুট বিকল্পগুলি ব্যবহার করার পরামর্শ দিচ্ছি। তারা পুনর্নির্দেশগুলি ব্যবহার করার চেয়ে অনেক দ্রুত চালায়।
atw31337

সুন্দর করে লেখা! এটি ফাইলটির মধ্য দিয়ে দু'বার পড়েছে, যা আপনি শেষ এন লাইনগুলি বাফার করলে সত্যই প্রয়োজন হয় না এবং এটি বড় ফাইলগুলির মধ্যে একটি সমস্যা। ব্যক্তিগতভাবে, আমার আর এটির দরকার নেই, তবে আপনি যদি এটির উন্নতি করতে মজা পান এবং অন্য লোকেরও প্রয়োজন হয় ... এই প্রশ্নটিতে কয়েকটি পছন্দ এবং বুকমার্ক ছিল।
হান্স-পিটার স্টার

@ হান্স-পিটার। বাফার আকারটি সরানো হবে এমন লাইনগুলির সংখ্যার উপর নির্ভর করবে। খুব বড় সংখ্যক লাইন ফাইল থেকে বাদ দেওয়ার দরকার পরে এটি একটি সমস্যা হতে পারে। মেমরি সম্পর্কিত সমস্যাগুলি এড়াতে, আমি স্ক্রিপ্টটি পুনরায় লিখেছিলাম উচ্চ এন মানগুলির সাথে লাইন গণনা পদ্ধতি এবং নিম্ন এন মানগুলির সাথে একটি বাফারিং পদ্ধতি ব্যবহার করতে; তবে এটি খুব বড় ফাইলটিতে পরীক্ষা করার পরে, মূল লাইন গণনা পদ্ধতিটি এখনও দ্রুত। দেখে মনে হচ্ছে বাফার পরিচালনা ওভারহেড লাইন গণনা ওভারহেডের চেয়ে বেশি or
atw31337

দুর্দান্ত, তবে বিএসডি-ভেরিয়েন্ট ম্যাক ওএস এক্সের জন্য ডিফল্টরূপে কোনও ট্যাক কমান্ড নেই। :( পরাজয় এই ধরনের ব্যবহারের ক্ষেত্রে।
ingyhere
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.