আমি একটি প্রশ্ন এসেছি (নিজেই নিজেই) যেখানে ওপিকে ইনপুট_ফাইলে নিজে সম্পাদনা করতে হবে এবং অপারেশনটি সংরক্ষণ করতে হবে।
আমি একক ইনপুট_ফাইলে জানি যে আমরা নিম্নলিখিতটি করতে পারি:
awk '{print "test here..new line for saving.."}' Input_file > temp && mv temp Input_file
এখন আসুন আমরা আমাদের ফাইলের একই ধরণের বিন্যাসে পরিবর্তন করতে হবে বলে মনে করি (এখানে .txt অনুমান করুন)।
আমি এই সমস্যার জন্য যা চেষ্টা করেছি / ভেবেছি: এর পদ্ধতির .txt ফাইল লুপের জন্য যাচ্ছি এবং একক কলawkকরা একটি বেদনাদায়ক এবং প্রস্তাবিত প্রক্রিয়া নয়, কারণ এটি অপ্রয়োজনীয় সিপিইউ চক্রকে অপচয় করবে এবং আরও সংখ্যক ফাইলের জন্য এটি আরও বেশি হবে মন্থর।
সুতরাং কোনও নন জিএনইউ awkদিয়ে ইনপ্লেস বিকল্প সমর্থন করে না এমন একাধিক ফাইলের জন্য ইনপ্লেস সম্পাদনা সম্পাদনের জন্য এখানে সম্ভবত কী করা যায় । আমি এই থ্রেড দিয়েও জাজের জায়গায় জায়গায় পরিবর্তনগুলি সংরক্ষণ করে চলেছি তবে কোন জিএনইউ অ্যাডাব্লু ভাইস এবং awkনিজের মধ্যে একাধিক ফাইল পরিবর্তন করার পক্ষে তেমন কিছুই নেই , যেহেতু একটি নন জিএনইউ অ্যাডকের inplaceপক্ষে বিকল্প নেই।
দ্রষ্টব্য: আমিbashযেহেতু ট্যাগযুক্ত করছি, আমার উত্তরের অংশে আমি অস্থায়ী ফাইলগুলির প্রকৃত ইনপুট_ফাইলে নামগুলিতে নাম যুক্ত করতে ব্যাশ কমান্ড ব্যবহার করেছি যাতে এটি যুক্ত করা হয়।
সম্পাদনা: এড স্যারের মন্তব্য অনুসারে এখানে নমুনাগুলির উদাহরণ যুক্ত করা হয়েছে, যদিও এই থ্রেডের কোডটির উদ্দেশ্যটি সাধারণ উদ্দেশ্য ইনপ্লেস সম্পাদনা দ্বারাও ব্যবহার করা যেতে পারে।
নমুনা ইনপুট_ফাইল (গুলি):
cat test1.txt
onetwo three
tets testtest
cat test2.txt
onetwo three
tets testtest
cat test3.txt
onetwo three
tets testtest
প্রত্যাশিত আউটপুট নমুনা:
cat test1.txt
1
2
cat test2.txt
1
2
cat test3.txt
1
2
awk(সম্ভবত একটি সাবসিলে) বা একটি {...}বদ্ধ গ্রুপ ব্যবহার করবেন না এবং তারপরে ফলাফলটি আকাঙ্ক্ষিত আউটপুট ফাইলটিতে লিখুন (প্রতিটি ইনপুট ফাইলের জন্য, বা সমস্ত ইনপুট ফাইলের জন্য একটি সম্মিলিত ফাইল)। তারপরে আপনি কেবল সাবস্কেল বা ব্রেস-সংযুক্ত গ্রুপের আউটপুটটি বর্তমান ফাইলটিতে লিখিত হচ্ছেন? awkকমান্ডটি অনুসরণ করে কেবল ইনপুট ফাইলগুলির একটি স্ট্রিং অন্তর্ভুক্ত করে ক্রমান্বয়ে সমস্ত ফাইল (বা অনুরূপ কিছু) প্রসেস করা হবে ??
awk {..} file1 .. fileXপরিবর্তিত ফাইলটি লিখতে 2 টি বিকল্প (1) দেখতে পাচ্ছি , যেমন temp01এবং পরবর্তী ফাইলটি প্রক্রিয়া করার সময় আপনার পরবর্তী পুনরাবৃত্তিতে, mv -f tmp01 input01পরিবর্তিত ডেটা দিয়ে ইনপুট ফাইলকে ওভাররাইট করতে একটি ব্যবহার করুন; বা (2) কেবল একটি নতুন ডিরেক্টরির লিখতে ./tmp/tmp01 ... ./tmp/tmp0Xচালানোর সময় awkফাইল উপর একটি লুপ সঙ্গে স্ক্রিপ্ট এবং ফলো-আপ ./tmpডিরেক্টরি ও যেমন mv -f "$i" "input_${i##*[^0-9]}"(অথবা যাই হোক না কেন সম্প্রসারণ আপনি পুরানো ইনপুট ফাইল প্রতিস্থাপন করা প্রয়োজন।
awkসম্পূর্ণ কোড সম্পন্ন না করেই কিছু করছি , ২ য় বিকল্পটি আমার পরামর্শ অনুসারে যা ব্যবহার করছি তা হ'ল আপনি যদি সলিউশন সলিউশন সম্পর্কে আপনার চিন্তাভাবনা জানাতে পারতেন তবে কৃতজ্ঞ হবেন।