কিভাবে একটি লাইন নম্বর [বন্ধ] এ বিভক্ত ফাইল করবেন


94

আমি একটি নির্দিষ্ট লাইন নম্বর থেকে 400k লাইনের দীর্ঘ লগ ফাইলটি বিভক্ত করতে চাই।

এই প্রশ্নের জন্য, যাক এটি একটি স্বেচ্ছাচারিত সংখ্যা 300k।

এমন কোনও লিনাক্স কমান্ড রয়েছে যা আমাকে এটি করার অনুমতি দেয় ( স্ক্রিপ্টের মধ্যে )?

আমি জানি splitযে ফাইলটি আকার বা লাইন সংখ্যা দ্বারা হয় সমান অংশে বিভক্ত করতে দেয় তবে এটি আমি চাই না। আমি একটি ফাইলে প্রথম 300k এবং দ্বিতীয় ফাইলটিতে শেষ 100k করতে চাই।

কোন সাহায্য প্রশংসা করা হবে। ধন্যবাদ!

দ্বিতীয় ভাবাতে এটি সুপারভাইজার বা সার্ভারফল্ট সাইটের পক্ষে আরও উপযুক্ত।


17
আমার মনে হয় এই প্রশ্নটি এখানে ঠিক আছে। আপনার একটি প্রোগ্রামিংয়ের কাজ রয়েছে যা আপনি শেল স্ক্রিপ্ট দিয়ে সমাধান করার চেষ্টা করছেন; যদি এটি ইউনিক্স সরঞ্জামগুলি উপলভ্যভাবে ব্যবহার করা হয় তবে এটি আরও ভাল!
জিম লুইস

আমি একই চিন্তা. কিন্তু তারপরে আমি আর শেল স্ক্রিপ্ট লিখছিলাম না :) ওহ ভাল, যাইহোক আমার উত্তর খুঁজে পেল। ধন্যবাদ
Denormalizer

4
এই প্রশ্নটি ইমো ঠিক আছে, নিঃসন্দেহে এটি একটি প্রোগ্রামিং প্রশ্ন এবং এটি খুব স্থানীয় নয়
পিটার

9
কেন এটি একটি অফ টপিক প্রশ্ন? চিন্তাভাবনা পুলিশ আগের চেয়ে বেশি পাগল।
কারেল বালেক

7
যদিও এই প্রশ্নটি কিছুটা অফ-টপিক হতে পারে, তবে এটি অত্যন্ত ভোট দেওয়া হয়েছে এবং অনুসন্ধানের ইঞ্জিনগুলিতে "লিনাক্সে লিনাক্স স্প্লিট ফাইল অব লাইনে" এই প্রথম ফলাফল। সুতরাং, আমি এই প্রশ্নটি আবার খোলার পরামর্শ দিচ্ছি, যাতে অন্যান্য মূল্যবান উত্তর যুক্ত করা যায়। বা কমপক্ষে এসইউ সম্পর্কিত সর্বাধিক প্রাসঙ্গিক প্রশ্নের লিংক তৈরি করুন।
এন্টোইন পিনসার্ড

উত্তর:


179
file_name=test.log

# set first K lines:
K=1000

# line count (N): 
N=$(wc -l < $file_name)

# length of the bottom file:
L=$(( $N - $K ))

# create the top of file: 
head -n $K $file_name > top_$file_name

# create bottom of file: 
tail -n $L $file_name > bottom_$file_name

এছাড়াও, দ্বিতীয় চিন্তায়, বিভাজনটি আপনার ক্ষেত্রে কাজ করবে, কারণ প্রথম বিভাজন দ্বিতীয়টির চেয়ে বড় than বিভক্ত ইনপুটটির ভারসাম্যকে শেষ বিভাজনে ফেলেছে তাই

split -l 300000 file_name

xaa400k লাইন xabসহ একটি ইনপুট জন্য 300k লাইন এবং 100k লাইন দিয়ে আউটপুট আসবে ।


ধন্যবাদ একটি অনুরূপ উত্তর পেয়েছে সুপারউজার উপর অর্থাত্। লেজ ইত্যাদি ব্যবহার করুন এবং হ্যাঁ বিভাজন আমার উদাহরণের সাথে কাজ করবে, তবে আমার উদাহরণটি 100K হয় না always
Denormalizer

4
আপনি যদি উইন্ডোজে এটি করার চেষ্টা করছেন এবং সাইগউইন ব্যবহার করতে না চান, এই প্রকল্পটি দেশীয় উইন 32
জনাথন হিল

15
আমি tail -n +L file_name > bottom_fileযেখানে প্রথম L=K+1চালানোর দরকার নেই কেবল সেখানে ব্যবহার করবwc
হ্যাশব্রাউন

4
আমি বরং ব্যবহার করব sed -n '1,1000p' test.log > top_test.log ; sed '1,1000d' test.log > bottom_test.log। আইএইচএমও, এটি আরও সহজবোধ্য এবং মোট লাইনের সংখ্যা গণনা করার প্রয়োজন নেই। এছাড়াও, প্রতিটি কমান্ডের প্রয়োগের মধ্যে লাইন যুক্ত করা থাকলে এটি এখনও কাজ করে।
এন্টোইন পিনসার্ড

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