দুটি ফাইল বিভক্ত করুন


18

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

আমি ব্যবহার করার চেষ্টা করেছি splitকিন্তু এটি একাধিক অংশ তৈরি করছে।


আপনি পরীক্ষা করেছেন split --help?
ব্রায়াম

হ্যাঁ আমি এটি পরীক্ষা করে দেখেছি, তবে একাধিক ফাইল তৈরি করছি যা আমার প্রয়োজন হয় না।
অরবিন্দ

উত্তর:


31

সবচেয়ে সহজ উপায় সম্ভবত ব্যবহার করা headএবং tail:

$ head -n 1000 input-file > output1
$ tail -n +1001 input-file > output2

যে থেকে প্রথম 1000 লাইন করা হবে input-fileমধ্যে output1শেষ পর্যন্ত 1001 থেকে, এবং সমস্ত লাইনoutput2


13

আমি মনে করি splitএটিই আপনি সেরা পন্থা।

-l xxxxবিকল্পটি ব্যবহার করার চেষ্টা করুন , যেখানে প্রতিটি ফাইলটিতে xXXx আপনার পছন্দ মতো লাইনের সংখ্যা (ডিফল্ট 1000)।

আপনি -n yyযদি ফাইল তৈরির পরিমাণ সম্পর্কে আরও উদ্বিগ্ন হন তবে আপনি বিকল্পটি ব্যবহার করতে পারেন । -n 2প্রতিটি ফাইলের রেখার পরিমাণ নির্বিশেষে ব্যবহারের ফলে আপনার ফাইলটি কেবল 2 অংশে বিভক্ত হবে।

আপনি নিজের ফাইলটিতে রেখার পরিমাণ গণনা করতে পারেন wc -l filename। লাইন অপশন সহ এটি 'ওয়ার্ডকাউন্ট' কমান্ড।

তথ্যসূত্র

  • man split
  • man wc

1
এভাবেই একটি নির্দিষ্ট সংখ্যক লাইনের ফাইলগুলির একগুচ্ছগুলিতে বিভক্ত হওয়া বা ফাইলগুলির একটি নির্দিষ্ট সংখ্যায় কিভাবে সমানভাবে বিভক্ত করা যায়। এক কি 1000 লাইনের ফাইল এবং অন্য সব কিছুর সাথে একটি ফাইলে বিভক্ত হওয়ার কোনও উপায় আছে? এটাই তিনি চেয়েছিলেন; আমি ম্যান পেজে এটি খুঁজে
পাইনি

আপনি ঠিক মাইকেল। আমি মনে করি আমি প্রশ্নের সরল দৃষ্টিভঙ্গি নিয়েছি। আপনি সমাধান এই ক্ষেত্রে সেরা এক। আর একটি উপায় হ'ল 'সেড' কমান্ডটি ব্যবহার করা হবে: সেড -n 1,1000 অরিজিন ফাইল> প্রথম_1000_lines। সেড '1,1000d' আসল ফাইল> বাকি_লাইন।
লুসিয়ান রাভেন

অবশ্যই আপনি করতে পারেন split -l 1000 bigfile && mv xaa piece1 && cat x?? > piece2 && rm x??
জি-ম্যান 23

8

এটি একটি কাজ csplit:

csplit -s infile 1001 

sনিখরচায় বিভক্ত হবে infile, প্রথম টুকরা xx00- 1001 লাইন এবং দ্বিতীয় টুকরা সহ xx01- বাকি লাইনগুলি অন্তর্ভুক্ত নয়।
আপনি যদি বিভিন্ন আউটপুট ফাইলের নাম প্রয়োজন যেমন -fএকটি উপসর্গ ব্যবহার এবং নির্দিষ্ট করে থাকেন তবে আপনি অপশনগুলির সাথে খেলতে পারেন :

csplit -sf piece. infile 1001 

নামে দুটি ফাইলের উত্পাদন করে piece.00এবংpiece.01


স্মার্ট দিয়ে headআপনি এমন কিছু করতেও পারেন:

{ head -n 1000 > 1st.out; cat > 2nd.out; } < infile

1
বাহ, এটা সত্যিই হয় জন্য একটি কাজ csplit। খুব সুন্দর. (আমি কেবল পসিক্স কমান্ডের তালিকাটি পড়ছি এবং csplitকমান্ডের উদ্দেশ্যটি সম্পর্কে প্রথমে আমার মাথাটি জড়িয়ে থাকাতে প্রচণ্ড সমস্যা হয়েছিল Turn এটি সত্যই সত্যই সক্রিয় s) :)
ওয়াইল্ডকার্ড

4

প্রশ্নটি যা জিজ্ঞাসা করে তা করার একটি সহজ উপায়, একটি কমান্ডে:

awk '{ if (NR <= 1000) print > "piece1"; else print > "piece2"; }' bigfile

বা, আপনার মধ্যে যারা দীর্ঘ, স্বজ্ঞাত বোঝা যায় এমন আদেশগুলি টাইপ করতে সত্যই ঘৃণা করেন,

awk '{ print > ((NR <= 1000) ? "piece1" : "piece2"); }' bigfile
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.