এক মধ্যে একাধিক txts একত্রিত করা

আমি একটি বড় ফাইল মধ্যে একাধিক txts একত্রিত করার চেষ্টা করছি। আমি তাদের ক্রম করা উচিত কিন্তু এই সঠিকভাবে কাজ না বলে মনে হয়।

At this time I tried from the terminal:cat *.txt >merged.txt but this seems to concatenate the files randomly.

আমার ফোল্ডারে আমার ক্রম সংখ্যার নাম রয়েছে (1.txt থেকে 10000.txt পর্যন্ত)। আমি কি কিছু অনুপস্থিত?

5

6 উত্তর

Globbing র্যান্ডম নয়, এটি বর্ণানুক্রমিক হতে গ্যারান্টিযুক্ত (আপনার স্থানীয় লোক অনুসারে আকাশ লেক্সিকোগ্রাফিক অর্ডার), যা সাংখ্যিক সাজানোর ক্রম থেকে ভিন্ন

আপনি এই জন্য আবদ্ধ সম্প্রসারণ ব্যবহার করতে পারেন। শেষ ফাইলের সংখ্যা দিয়ে '10' প্রতিস্থাপন করুন।

cat {1..10}.txt > merged.txt

এটি ব্যাশ ব্রেস এক্সটেনশন ব্যবহার করে, যা আপনি কম = '+/ব্রেস এক্সটেনশান' man bash এ পড়তে পারেন।

উল্লেখ্য যে ফাইল গ্লবগুলির বিপরীতে, ব্রাস এক্সটেনশানটি ইচ্ছাকৃত স্ট্রিংগুলি তৈরি করবে যা বিদ্যমান ফাইলগুলির প্রয়োজন হবে না; এই ক্ষেত্রে এর অর্থ হল ক্রম থেকে ফাইলগুলি অনুপস্থিত থাকলে ত্রুটিগুলি পাবেন (উদাঃ যদি 7.txt বিদ্যমান না থাকে)। যাইহোক, এটি merged.txt এর সামগ্রীগুলিকে প্রভাবিত করবে না যা প্রত্যাশিত হিসাবে উত্পন্ন হবে।

10
যোগ
এই অপ্রয়োজনীয়ভাবে চতুর্ভুজ হয়; বিড়াল $ (আমি {1.10.} এর জন্য; "$ {i} .txt"; সম্পাদন করবো) >> merged.txt পুরোপুরি পর্যাপ্ত।
যোগ লেখক zombat, উৎস
@ উইলকার্ড আপনি নিশ্চয়ই সঠিক যে গ্লব্বিংটি একটি লুপের চেয়ে ভাল। আমি শুধু বড় শব্দ একটি উপাদান হিসাবে আবদ্ধ সম্প্রসারণ ব্যবহার করার চিন্তা। উন্নতির জন্য ধন্যবাদ।
যোগ লেখক zombat, উৎস
@ ওয়াচারিন ধন্যবাদ, এটি নিরপেক্ষ, আমি মনে করি {1.1010} একটি zsh জিনিস ছিল তবে আমি কীভাবে এটি ব্যবহার করার জন্য ডিজাইন করা হয়েছিল তা বিড়ালের একাধিক আর্গুমেন্ট সম্পর্কে চিন্তা করা উচিত।
যোগ লেখক Pacerier, উৎস
@ উইলকার্ড আপনি ঠিক আছেন, শুধু লক্ষ্য করেছেন যে আপনি উত্তরটিও দিয়েছেন, আপত্তিকর
যোগ লেখক Pacerier, উৎস
লুপের জন্য আপনার দরকার নেই; আপনি ভাল ফাইল globbing প্রয়োজন (যেমন <�কোড> zsh </কোড> আছে)।
যোগ লেখক Wildcard, উৎস
ধন্যবাদ; আমি এই উত্তরের কমান্ডটিকে আরও সরল করে তুলি, আরো অনৈতিক হতে-আশা করি আপনি কিছু মনে করবেন না। :) আমি কিভাবে bash সঙ্গে এটা করতে হবে; upvoted।
যোগ লেখক Wildcard, উৎস

In command promt:
cd "path to directory" (Enter)
copy *.txt result.txt (Enter)

4
যোগ
@ কেভিন কি বলেন ... আমি উইন্ডোতে concatenate ফাইলগুলিতে যে পদ্ধতিটি ব্যবহার করে মনে করছি না তাই আমি জানি না যে আপনি কীভাবে উত্তরটি পেয়েছেন।
যোগ লেখক Douglas, উৎস
এটি উইন্ডোজ জিনিস কিনা তা নিশ্চিত না, তবে অনুলিপি এমনকি ম্যাকOSগুলিতে একটি কমান্ডও নয় এবং cp এমন কাজ করে না। অন্যান্য উত্তর দেখুন।
যোগ লেখক Telmo Marques, উৎস

(z) গ্লোবাল কোলাইফায়ারের সাথে zsh ব্যবহার করুন এবং গ্লোব এক্সপ্যানশনগুলির সংখ্যাসূচক বিন্যাস সক্ষম করুন ব্যবহার করুন:

zsh -c 'cat *.txt(n) > merged.txt'

আপনি আপনার globs সঙ্গে আরো নির্দিষ্ট পেতে পারেন, এছাড়াও:

zsh -c 'cat <1-10000>.txt(n) > merged.txt'

সম্পূর্ণ বিবরণের জন্য man zshexpn দেখুন।

3
যোগ
যদি আপনার মাল্টিস বিকল্প সেট থাকে তবে আপনি cat বাদ দিতে পারেন এবং শুধুমাত্র <*। Txt (n)> merged.txt ব্যবহার করুন (অথবা < কোড> <*। txt ~ merged.txt (n)> merged.txt যদি এটি ইতিমধ্যে বিদ্যমান থাকে)
যোগ লেখক Telmo Marques, উৎস
@ জেএবি ম্যাচ করবে না। এটা চেষ্টা করুন।
যোগ লেখক Wildcard, উৎস
এটি অত্যন্ত অসম্ভাব্য, তবে এক্সটেনশানটি যদি একটি আক্ষরিক .txt (n) হয় তাহলে কী হবে?
যোগ লেখক Kelvin, উৎস

সাধারণত, আপনি ls এর আউটপুট পার্স করবেন না, কিন্তু আপনার ফাইলের নামগুলিতে কোন হোয়াইটস্পেস বা "অস্বাভাবিক" অক্ষর থাকে না, আমরা এটি করতে পারি:

shopt -s extglob
ls +([0-9]).txt | sort -n | xargs cat > merged.txt

+ ([0-9]) একটি ব্যাশ বর্ধিত গ্লব প্যাটার্ন শুধুমাত্র এক বা একাধিক নম্বরের সাথে মেলে।

জিএনইউ ls (কোর্টিলস প্যাকেজে হোমব্রু মাধ্যমে উপলব্ধ)

ls -v +([0-9]).txt | xargs cat > merged.txt
1
যোগ

হেড আপ। যদি ফাইলগুলি প্রকৃতপক্ষে 1 - 10000 নাম্বারযুক্ত হয় তবে অপারেটিং সিস্টেমটি আপনার ফাইলগুলিকে প্রথম সংখ্যা অনুসারে সাজানো হয়: 1.txt 11.txt 12.txt ... 19.txt 100.txt ... 2.txt 20.txt 21.txt

প্রভৃতি

আপনি 00001, 00002 এবং তাই হিসাবে ফাইলের নাম পরিবর্তন করতে হবে।

1
যোগ
@ ব্রান্ডিটো, কোন ডিফল্ট ম্যাক ইনস্টলেশনের ক্ষেত্রে rename এর মতো কোনও কমান্ড নেই। এমনকি লিনাক্সেও আপনি যে কমান্ড লিখেছেন তা কাজ করবে না; বিভিন্ন লিনাক্স ডিস্ট্রোতে পুনঃনামকরণ এর জন্য বিভিন্ন অসঙ্গতিপূর্ণ বাক্যবিন্যাস রয়েছে।
যোগ লেখক Wildcard, উৎস
সাইড প্রশ্নঃ তা করার দ্রুত উপায়? Automator? টার্মিনাল?
যোগ লেখক Jeremy K, উৎস
.txt 0000 .txt নামকরণ করুন?
যোগ লেখক hanzo2001, উৎস

আরেকটি সম্ভাব্য উত্তর হতে পারে:

ls | sort -n | xargs cat > merged.txt


On a GNU/Linux system you can do ls -v | xargs cat > merged.txt, but this is specific to the GNU version of ls and does not work for BSD ls.

1
যোগ
-1, ls -v একটি ম্যাক লিনাক্সে ls -v থেকে সম্পূর্ণ ভিন্ন কিছু করে। ফাইলগুলি সংখ্যাসূচক শর্টিংয়ের জন্য ম্যাক বিএসডি সরঞ্জামগুলি এবং -v ব্যবহার করে কেবল GNU ls এর বৈশিষ্ট্য। বিএসডি এর জন্য ls , -v মানে অ গ্রাফিক অক্ষরগুলির অননুমোদিত মুদ্রণ; আউটপুট একটি টার্মিনাল নয় যখন এটি ডিফল্ট।
যোগ লেখক Wildcard, উৎস
আমার খারাপ, আমি যে প্রতিফলিত আমার উত্তর আপডেট করব।
যোগ লেখক Prabash, উৎস