লাইন দ্বারা একটি ফাইল বিভক্ত করুন এবং ফলাফল ফাইল এক্সটেনশনের উপর নিয়ন্ত্রণ রাখুন have


28

ফাইল বিভাজন - বিভক্তির জন্য একটি মানক কমান্ড রয়েছে।

উদাহরণস্বরূপ, আমি যদি 10000 লাইনের কয়েকটি অংশে একটি শব্দের ফাইল বিভক্ত করতে চাই, তবে আমি এটি ব্যবহার করতে পারি:

split -dl 10000 words wrd

এবং এটি wrd.01, wrd.02 ইত্যাদির ফর্মের বেশ কয়েকটি ফাইল উত্পন্ন করবে।

তবে আমি এই ফাইলগুলির জন্য একটি নির্দিষ্ট এক্সটেনশন রাখতে চাই - উদাহরণস্বরূপ, আমি wtd.01.txt, wrd.02.txt ফাইলগুলি পেতে চাই।

এটি করার কোন উপায় আছে?

উত্তর:


12

সাথে নয় split, তবে আপনি পরে এগুলি সহজেই নামকরণ করতে পারেন, বা আপনি এটি এতে করতে পারেন awk:

awk '{filename = "wrd." int((NR-1)/10000) ".txt"; print >> filename}' inputfile

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

@ রোগাচ দুঃখিত, আমি এটি পরীক্ষা করিনি, তাই আমি ভুলে গিয়েছিলাম পূর্ণসংখ্যা বিভাজন করে না। আমি এটি পরীক্ষা করেছি।
কেভিন

49

এটি তখন আর উপলভ্য ছিল না তবে একের একাধিক সাম্প্রতিক সংস্করণ ( ≥ 8.16) সহ ফলাফলটি এক্সটেনশানটির নিয়ন্ত্রণ রাখতে সুইচটি gnu splitব্যবহার করতে পারে --additional-suffix। থেকে man split:

--additional-suffix=SUFFIX
              append an additional SUFFIX to file names.

সুতরাং এই বিকল্পটি ব্যবহার করার সময়:

split -dl 10000 --additional-suffix=.txt words wrd

ফলস্বরূপ টুকরা স্বয়ংক্রিয়ভাবে শেষ হবে .txt:

wrd00.txt
wrd01.txt
.........

3
ম্যাক
Ericgu

2
আমি তোমার বিদ্রূপ ভালবাসি। আমি অ্যাপল বিশ্বের এক ইউনিক্স এন 100 বি। আমি ওএস এক্স ইয়োসেমাইট ব্যবহার করছি এবং আমি চাইনি অন্যরাও আমার মতো ক্রাশ হয়ে জ্বলে উঠুক। আমি ডক্সে পরীক্ষা এবং পর্যালোচনা করেছি এবং আমাদের কাছে এই প্যারামিটারটি নেই। আমি কিছু মিস করতে পারে। বিকাশকারী.অ্যাপল.
com

5
@swiftshokunin - এতে আমার উত্তর সংক্রান্ত gnu split, অংশ gnu coreutils। এটি ওএসএক্স-এও উপলব্ধ যদি আপনি এর coreutilsমাধ্যমে ইনস্টল করেন homebrewতবে নোট করুন যে ডিফল্টরূপে, ওএসএক্সে, gnuইউটিলিটিগুলি gতাদের নামের (যেমন gstatপরিবর্তে stat) প্রিপেন্ড করেছে তাই আপনি এটি হিসাবে আবেদন করতে পারেন gsplit(বা গাইড চাইলে এখানে গাইড অনুযায়ী পরিবর্তন করুন) splitওএসএক্সের মতো এটি ব্যবহার করতে split)। আছে HTH।
don_crissti

1
চমৎকার উত্তর. ওএস এক্স-এ, কাজ করার gsplitজন্য সংখ্যার প্রত্যয় (-d) পেতে ব্যবহার করুন ।
ব্রেন্ট ফাউস্ট

1
বাহ, আমি জিএসপি্লিট আছে তা সম্পর্কে আমার ধারণা ছিল না - এটি সম্ভবত উপরে বর্ণিত কোর্টিলগুলি থেকে এসেছে এবং এটিতে - প্রচলিত-প্রত্যয় রয়েছে। এই সমাধানটিতে মন্তব্য করা প্রত্যেককে ধন্যবাদ :)
Łukasz Rysiak

13

এই জাতীয় কাজগুলি শেল দিয়ে সর্বাধিক পরিচালিত হয়। বিভক্ত ব্যবহার করুন এবং তারপরে ফাইলগুলির নাম পরিবর্তন করতে একটি সাধারণ লুপ লিখুন। যেমন

for file in wrd.*
do
    mv "$file" "$file.txt"
done

আপনার wrd.01, wrd.02, ইত্যাদি ফাইলগুলির নাম পরিবর্তন করে দেবে যাতে তাদের সকলের একটি .txt এক্সটেনশন থাকে।


এটি বেশ সুস্পষ্ট, তবে এটি ব্যাশ স্ক্রিপ্টের সংক্ষিপ্তকরণটি ভেঙে দেবে।
রোগাচ

1
ইউনিক্স দর্শন আপনাকে একটি সহজ সরঞ্জামের একটি সেট সরবরাহ করা যা আপনি তার পরে কোনও কাজ করার জন্য একত্রিত হন। "বাশ স্ক্রিপ্টের সংক্ষিপ্ততা" আপনার প্রশ্নে একটি বর্ণিত প্রয়োজনীয়তা ছিল না।
কাইল জোন্স

7
দ্রষ্টব্য: split+mvকম্বো আরো যে 6 গুণ দ্রুত তুলনায় awk(প্রায় 3s বনাম -18 10 মিলিয়ন লাইন ইনপুট ফাইল (75 মেগাবাইট) এর জন্য) ... প্রতিটি লাইনে টেক্সট নিজস্ব লাইন সংখ্যা ছিল ... পুনরায় জানায় জন্য ধন্যবাদ "সুস্পষ্ট" :)
পিটার.ও

3
পিপিএস: আমি এটিকে আরও কিছুক্ষণ পরীক্ষা করে দেখছি। গতি-পার্থক্য তৈরি ফাইলগুলির সংখ্যার সাথে বনাম বিন্যাসের সংখ্যা এবং পাটিগণিত গণনাগুলির সাথে সম্পর্কিত যা আউটপুট ফাইলের সংখ্যা নির্বিশেষে প্রতিটি লাইনের জন্য করে ... উপরের উদাহরণ হিসাবে একই ইনপুট ফাইল ব্যবহার করে: যখন সেখানে থাকে 100 বার তার চেয়ে কম ফাইল, split + mvহয় 75 চেয়ে গুণ দ্রুত awkআছে কখন: 100 গুণ বেশি ফাইল, split + mvহয় 1.5 বার তুলনায় দ্রুততর awk। সুতরাং, আমার জন্য, এই split + mvপদ্ধতিটি হাতছাড়া করে। এটি কনসাইস হিসাবে (তর্কযোগ্যভাবে মোরসো), এবং এটির চেয়েও দ্রুত awk
পিটার.ও

1
আপনি যদি এটি 5 লাইন দীর্ঘ হওয়ার বিষয়ে উদ্বিগ্ন হন তবে পরিবর্তে এটি ব্যবহার করে দেখুন: for file in wrd.*; do mv "$file" "$file.txt"; done:)
টনি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.