আমি ভিআইএম-তে একটি বিশাল (GB 2 গিগাবাইট) ফাইল খোলার চেষ্টা করেছি তবে এটি চেপে গেছে। আমার আসলে ফাইলটি সম্পাদনা করার দরকার নেই, কেবল দক্ষতার সাথে ঝাঁপিয়ে পড়ুন।
আমি কীভাবে ভিআইএম-এ খুব বড় ফাইল নিয়ে কাজ করতে পারি?
:set binary
প্রথম ...
আমি ভিআইএম-তে একটি বিশাল (GB 2 গিগাবাইট) ফাইল খোলার চেষ্টা করেছি তবে এটি চেপে গেছে। আমার আসলে ফাইলটি সম্পাদনা করার দরকার নেই, কেবল দক্ষতার সাথে ঝাঁপিয়ে পড়ুন।
আমি কীভাবে ভিআইএম-এ খুব বড় ফাইল নিয়ে কাজ করতে পারি?
:set binary
প্রথম ...
উত্তর:
আজ সম্পাদনা করার জন্য আমার কাছে একটি 12 জিবি ফাইল ছিল। ভিএম লার্জফিল প্লাগইন আমার পক্ষে কাজ করে নি। এটি এখনও আমার সমস্ত স্মৃতি ব্যবহার করে এবং এরপরে একটি ত্রুটি বার্তা প্রিন্ট করেছে :-(। আমি কোনওটির জন্য হেক্সিডিট ব্যবহার করতে পারিনি, কারণ এটি কোনও কিছু সন্নিবেশ করতে পারে না, কেবল ওভাররাইট করে দিতে পারে Here এখানে বিকল্প পদ্ধতির উপায় রয়েছে:
আপনি ফাইলটি বিভক্ত করেছেন, অংশগুলি সম্পাদনা করুন এবং তারপরে এটি পুনরায় সংযুক্ত করুন। যদিও আপনার এখনও ডিস্ক স্পেসের দ্বিগুণ দরকার।
আপনি যে লাইনে সম্পাদনা করতে চান তার আশেপাশের কিছুতে গ্রেপ করুন:
grep -n 'something' HUGEFILE | head -n 1
ফাইলের এই ব্যাপ্তিটি বের করুন। আপনি যে রেখাগুলি সম্পাদনা করতে চান সেগুলি 4 এবং 5 লাইনে রয়েছে বলে দিন Then
sed -n -e '4,5p' -e '5q' HUGEFILE > SMALLPART
-n
বিকল্প sed ডিফল্ট ব্যবহারকে দমন করতে সবকিছু প্রিন্ট করতে প্রয়োজন বোধ করা হয়4,5p
প্রিন্ট 4 এবং 55q
লাইন 5 প্রসেসিং পরে অবসন্ন করা SMALLPART
আপনার প্রিয় সম্পাদক ব্যবহার করে সম্পাদনা করুন ।
ফাইলটি একত্রিত করুন:
(head -n 3 HUGEFILE; cat SMALLPART; sed -e '1,5d' HUGEFILE) > HUGEFILE.new
HUGEFILE.new
এখন আপনার সম্পাদিত ফাইল হবে, আপনি আসলটি মুছতে পারেন HUGEFILE
।
এটি বহু বছর ধরে পুনরাবৃত্তি হওয়া প্রশ্ন। (সংখ্যাগুলি পরিবর্তন হতে থাকে, তবে ধারণাটি একই রকম: আমি মেমরির চেয়ে বড় ফাইলগুলি কীভাবে দেখতে বা সম্পাদনা করব?)
স্পষ্টতই more
বা less
নিছক ফাইলগুলি পড়ার জন্য ভাল পন্থা --- less
এমনকি vi
স্ক্রোলিং এবং অনুসন্ধানের জন্য কীবাইন্ডিংয়ের মতো অফার ।
"বড় ফাইলগুলিতে" একটি ফ্রেশমিট অনুসন্ধান পরামর্শ দেয় যে দুটি সম্পাদক আপনার প্রয়োজনের জন্য বিশেষভাবে উপযুক্ত হবে।
একটি হ'ল lfhex ... একটি বৃহত ফাইল হেক্স সম্পাদক (যা Qt এর উপর নির্ভর করে)। স্পষ্টতই এটি জিওআই ব্যবহার করে।
অন্যটি কনসোল ব্যবহারের জন্য উপযুক্ত বলে মনে হচ্ছে: হেড ... এবং এটি দাবি করেছে একটি vim
পছন্দযুক্ত ইন্টারফেস রয়েছে (একটি ex
মোড সহ ?)।
আমি নিশ্চিত যে আমি লিনাক্স / ইউনিক্সের অন্যান্য সম্পাদকদের দেখেছি যারা সম্পূর্ণরূপে স্মৃতিতে লোড না করে ফাইলের মাধ্যমে পৃষ্ঠাগুলি সরবরাহ করতে সক্ষম হয়েছিল। তবে আমি তাদের কোনও নাম মনে করতে পারি না। এই সম্পাদকের সাথে অন্যদের লিঙ্ক যুক্ত করতে উত্সাহিত করার জন্য আমি এই প্রতিক্রিয়াটিকে "উইকি" এন্ট্রি করছি। (হ্যাঁ, আমি ব্যবহার করে ইস্যুটি সম্পর্কে কাজ করার উপায়গুলির সাথে পরিচিত split
এবং cat
; তবে আমি সম্পাদকদের, বিশেষত কনসোল / অভিশাপ সম্পাদকদের কথা ভাবছি যা এটি সরবরাহ করতে পারে এবং আমাদের সাথে সময় / বিলম্ব এবং ডিস্ক স্পেসের ওভারহেড বাঁচাতে পারে যা এই ধরণের পদ্ধতির অন্তর্ভুক্ত থাকে) ।
যেহেতু আপনার আসলে ফাইলটি সম্পাদনা করার দরকার নেই:
view
(মাত্র চেষ্টা করা ও সময়সাপেক্ষে) কিছুটা সময় নেবে । মঞ্জুর, এটি তাত্ক্ষণিকভাবে নয়, তবে এটি কাজ করে।
আমি ফ্লোরিয়ার উত্তরের উপর ভিত্তি করে একটি ছোট স্ক্রিপ্ট লিখেছিলাম যা ন্যানো (আমার প্রিয় সম্পাদক) ব্যবহার করে:
#!/bin/sh
if [ "$#" -ne 3 ]; then
echo "Usage: $0 hugeFilePath startLine endLine" >&2
exit 1
fi
sed -n -e $2','$3'p' -e $3'q' $1 > hfnano_temporary_file
nano hfnano_temporary_file
(head -n `expr $2 - 1` $1; cat hfnano_temporary_file; sed -e '1,'$3'd' $1) > hfnano_temporary_file2
cat hfnano_temporary_file2 > $1
rm hfnano_temporary_file hfnano_temporary_file2
এটি এর মতো ব্যবহার করুন:
sh hfnano yourHugeFile 3 8
উদাহরণস্বরূপ, ন্যানো 3 থেকে 8 লাইন খুলবে, আপনি এগুলি সম্পাদনা করতে পারবেন এবং আপনি সংরক্ষণ এবং প্রস্থান করার পরে, বিশাল ফাইলের lines লাইনগুলি স্বয়ংক্রিয়ভাবে আপনার সংরক্ষিত রেখাগুলির সাথে ওভাররাইট হয়ে যাবে।
আমার একই সমস্যা ছিল, তবে এটি একটি 300 গিগাবাইট মাইএসকিএল ডাম্প ছিল এবং আমি এ থেকে মুক্তি পেতে চাই DROP
এবং এতে পরিবর্তন CREATE TABLE
করতে CREATE TABLE IF NOT EXISTS
চাইলে দুটি অনুরোধ চালাতে চাইনি sed
। আমি এই পরিবর্তনগুলি দিয়ে ফাইলটি ছাপাতে এই রুবি স্ক্রিপ্টটি লিখেছি:
#!/usr/bin/env ruby
matchers={
%q/^CREATE TABLE `foo`/ => %q/CREATE TABLE IF NOT EXISTS `foo`/,
%q/^DROP TABLE IF EXISTS `foo`;.*$/ => "-- DROP TABLE IF EXISTS `foo`;"
}
matchers.each_pair { |m,r|
STDERR.puts "%s: %s" % [ m, r ]
}
STDIN.each { |line|
#STDERR.puts "line=#{line}"
line.chomp!
unless matchers.length == 0
matchers.each_pair { |m,r|
re=/#{m}/
next if line[re].nil?
line.sub!(re,r)
STDERR.puts "Matched: #{m} -> #{r}"
matchers.delete(m)
break
}
end
puts line
}
অনুরোধ করা হয়েছে
./mreplace.rb < foo.sql > foo_two.sql
chmod +x mreplace.rb
প্রথমে এক্সি হিসাবে এটি চালানোর জন্য আপনি কেবল ঠিক করতে পারেনruby mreplace.rb ..
বিশাল ওয়ান-লাইনারের জন্য (এর থেকে অক্ষর মুদ্রণ 1
করে 99
):
cut -c 1-99 filename
এটি ইতিমধ্যে দেরি হয়ে গেছে তবে আপনি যদি ফাইলটি সম্পাদনা না করেই সন্ধান cat
করতে চান তবে কাজটিও করতে পারেন।
% cat filename | less
বা বিকল্প হিসাবে সহজ:
% less filename
cat
প্রথমে ফাইলটি টাইিং করা অত্যন্ত নির্বোধ, কারণ এর অর্থ হয় ফাইলটি সম্পূর্ণরূপে মেমরির মধ্যে থাকবে (সুতরাং ফাইলটি সন্ধান করতে পারে less
) বা এটি সন্ধান করা যায় না; cat
কেবল স্থির আউটপুট স্ট্রিম দেয়।
ইমাসগুলি 100 মেগাবাইটের ফাইলগুলির সাথে খুব ভালভাবে কাজ করে, আমি খুব বেশি ঝামেলা ছাড়াই লগ ফাইলগুলিতে এটি ব্যবহার করেছি।
তবে সাধারণত যখন আমার একধরনের বিশ্লেষণের কাজ হয়, আমি পার্ল স্ক্রিপ্টটি লেখার চেয়ে আরও ভাল পছন্দ খুঁজে পাই।
পুরানো সুতো তবে তবুও (পুণ :) :)।
$less filename
কম সম্পাদন করে দক্ষতার সাথে কাজ করে যদি আপনি সম্পাদনা করতে না চান এবং কেবল চারপাশে দেখুন যা বিশাল লগ ফাইলগুলি পরীক্ষা করার ক্ষেত্রে the
Vi এর মতো কম কাজের সন্ধান করুন
সেরা অংশ, এটি বেশিরভাগ ডিস্ট্রোজে ডিফল্টরূপে উপলব্ধ। সুতরাং পাশাপাশি উত্পাদন পরিবেশের জন্য সমস্যা হবে না।
এটি পুরানো তবে, ন্যানো, ভিম বা জিভিম ব্যবহার করুন