বড় এক-লাইন ফাইলে বেসিক সেড কমান্ড: মেমরিটিকে পুনরায় বরাদ্দ করতে পারেনি


10

আমার কাছে 250 এমবি টেক্সট ফাইল রয়েছে, সমস্ত এক লাইনে।

এই ফাইলটিতে আমি aঅক্ষরগুলির সাথে bঅক্ষরগুলি প্রতিস্থাপন করতে চাই :

sed -e "s/a/b/g" < one-line-250-mb.txt

এটি এতে ব্যর্থ হয়:

sed: couldn't re-allocate memory

আমার কাছে মনে হয় এই ধরণের টাস্ক বেশি মেমরি বরাদ্দ না করে ইনলাইন সম্পাদন করা যেতে পারে।
কাজের জন্য আরও ভাল সরঞ্জাম আছে, বা আরও ভাল ব্যবহারের উপায় sed?


জিএনইউ
সেড সংস্করণ 4.2.1 উবুন্টু 12.04.2 এলটিএস
1 জিবি র‌্যাম



4
এই প্রশ্নটি একটি খুব জটিল বহু লাইন প্রকাশের বিষয়ে is আমার প্রশ্নটি আপনি কল্পনা করতে পারেন এমন সবচেয়ে প্রাথমিক ধারণা সম্পর্কে about
নিকোলাস রাউল

@ রুবানস্যাভি প্লাস, অন্য কিউ-তে থাকা উত্তরগুলির মধ্যে একটিও লম্বা লাইনকে বিবেচনা করে না এবং বাস্তবে, উভয়েরই সম্ভবত একই সমস্যা থাকবে।
টেরডন

আপনি কি এই কিউতে আপনার সেড সংস্করণ এবং আপনার হার্ডওয়্যার সম্পর্কিত তথ্য (বিশেষত র‌্যাম) এবং ডিস্ট্রো সংস্করণ অন্তর্ভুক্ত করতে পারেন?
slm

উত্তর:


10

হ্যাঁ, trপরিবর্তে ব্যবহার করুন:

tr 'a' 'b' < file.txt > output.txt

sedলাইনে লেনদেন হয় যাতে একটি বিশাল লাইন এটি সমস্যার কারণ হবে। আমি আশা করি এটি রেখাটি ধরে রাখতে অভ্যন্তরীণভাবে কোনও চলক ঘোষণা করছে এবং আপনার ইনপুট সেই ভেরিয়েবলের বরাদ্দ করা সর্বাধিক আকার ছাড়িয়েছে ex

tr অন্যদিকে অক্ষরগুলির সাথে ডিল করে এবং নির্বিচারে দীর্ঘ লাইনগুলি সঠিকভাবে পরিচালনা করতে সক্ষম হওয়া উচিত।


কৌতূহলীভাবে আমি সবেমাত্র একটি 250MB ফাইল ডাব্লু / "অ্যাবাক্যাবসি ..." তৈরি করেছি এবং sed -e "s/a/z/g" b.txt > c.txtকোনও সমস্যা ছাড়াই করতে সক্ষম হয়েছি । সেড (জিএনইউ সেড) ব্যবহার করে 4.2.2।
slm

@ এসএমএল এখানে 496 এম ফাইল এবং একই sedসংস্করণে সমান , অনুমান করুন এটি বাস্তবায়ন বা হার্ডওয়ারের উপর নির্ভর করে।
টেরডন

হ্যাঁ, আমি যদি অনুমান করতে পারি যে আমরা একটি পুরানো সংস্করণ নিয়ে কাজ করছি sed
slm

5

সেড এবং অ্যাডকের sedতিহাসিক সংস্করণগুলিতে স্মৃতি সমস্যা ছিল, এগুলি বেশিরভাগ সাম্প্রতিক সংস্করণগুলিতে স্থির করা হয়েছে, তবে এই সমস্যার অন্যতম ক্লাসিক ঘটনা ল্যারি ওয়ালকে মারাত্মকভাবে আঘাত করেছে । তার উত্তরটি ছিল একটি নতুন প্রোগ্রামিং ভাষা লেখার জন্য - হার্ডওয়্যার ছাড়া অন্য কোনও স্মৃতি সীমাবদ্ধ নয়। তিনি এটিকে পার্ল বলেছেন। আপনার নির্দিষ্ট সমস্যাটি আরও সহজভাবে সমাধান করা যেতে পারে তবে আমি যে থাম্ব ব্যবহার করি তা সাধারণ নিয়মটি যখন সেড পার্ল ব্যবহার করবে না।

সম্পাদনা করুন: অনুরোধ করে একটি উদাহরণ করুন:

perl -pe "s/a/b/g" < one-line-250-mb.txt

বা কম স্মৃতি ব্যবহারের জন্য:

perl -e 'BEGIN{$/=\32768}' -pe "s/a/b/g" < one-line-250-mb.txt

1
এই পুরো অনুচ্ছেদটি "পার্ল।" এ ফোটে। কিছু বিশদটি চমৎকার, বা কমপক্ষে একটি উদাহরণ বা কিছু হতে পারে
মাইকেল মরোজেক

@ মিশেলমরোজেক আমি বুঝতে পেরেছি যে টুপি সংগ্রহের ফলে রোবয়েডিং বাড়ে, তবে আপনার সুনামের সাথে আমি বুঝতে পেরেছি আপনি কিছুটা মনোযোগ দিন। বিশেষত যে নির্দিষ্ট সমস্যাটি ইতিমধ্যে সমাধান হয়ে গিয়েছিল, খুব সংকীর্ণভাবে, এটি বেশিরভাগ লোককে অনুসন্ধানে সহায়তা করবে না, তাই আমি সাধারণ মামলার জন্য একটি উত্তর যুক্ত করেছি। আমি যে প্রসারিত উত্তরটি দিয়েছি তা নিকোলাস রাউলকে সাহায্য করতে পারত যদি ইতিমধ্যে কার্যকরভাবে সমাধান না হত তবে আমি সন্দেহ করি এটি আরও অনেককে সাহায্য করবে, যদিও আমার আসল উত্তরটি সেডের সীমাতে পৌঁছে যাওয়া প্রত্যেককেই সহায়তা করবে। আপনি যদি মতানৈক্য করেন তবে আমি মুছে
ফেলব

@ ছেলেরা আমি মনে করি না যে এটি জিজ্ঞাসা করা খুব বেশি যে আপনি মডারেটররা যখন আপনার উত্তরের বিষয়ে বৈধ মন্তব্য করছেন, তাত্ক্ষণিকভাবে ছোট্ট উদ্দেশ্যগুলির (টুপি, সত্যিকারের ?!) অভিযোগের অবলম্বন না করে আপনি তাদের উত্তরের বিষয়ে বিশ্বাস স্থাপন করতে পারেন।
ক্রিস ডাউন

বিপরীতে @ ক্রিসডাউন - আমি সম্পূর্ণভাবে এটি টুপিগুলিতে আছি। এটি একাধিক লোকের দ্বারা উত্তর না হিসাবে চিহ্নিত করা হয়েছিল, তবে এটি টুপিগুলির মধ্যে একটি দূর দ্বিতীয় অগ্রাধিকার
মাইকেল মরোজেক

স্মৃতি সীমাবদ্ধতা সহ দ্বিতীয়টি কৌতুকটি করেছিল (আমার 2.5 জিবি 1-লাইন ফাইলের জন্য): ধন্যবাদ! sedযদিও বিট হতাশ । : \
টমিসলভ নাকিক-আলফায়ারভিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.