ভিআইএম-এ বিশাল ফাইল নিয়ে কাজ করছেন


108

আমি ভিআইএম-তে একটি বিশাল (GB 2 গিগাবাইট) ফাইল খোলার চেষ্টা করেছি তবে এটি চেপে গেছে। আমার আসলে ফাইলটি সম্পাদনা করার দরকার নেই, কেবল দক্ষতার সাথে ঝাঁপিয়ে পড়ুন।

আমি কীভাবে ভিআইএম-এ খুব বড় ফাইল নিয়ে কাজ করতে পারি?



5
তেজ আপনি যতদিন ঠিক আছে হওয়া উচিত :set binaryপ্রথম ...
ephemient

1
এটি একটি নতুন ফিউজ ফাইল সিস্টেমের জন্য একটি ভাল লক্ষ্য! স্প্লিটফ্লস বা এরকম কিছু ... আমি এতে আছি!
রডরিগো

1
খুব দেরী ... এটি ইতিমধ্যে বিদ্যমান: সোর্সফোর্জ.नेट
প্রকল্পগুলি

5
আপনার পেজার দরকার, সম্পাদক স্যার নয়! নীচে জিম এর উত্তর দেখুন।
লেস্টার চেউং

উত্তর:


85

আজ সম্পাদনা করার জন্য আমার কাছে একটি 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 এবং 5
    • 5q লাইন 5 প্রসেসিং পরে অবসন্ন করা
  • SMALLPARTআপনার প্রিয় সম্পাদক ব্যবহার করে সম্পাদনা করুন ।

  • ফাইলটি একত্রিত করুন:

    (head -n 3 HUGEFILE; cat SMALLPART; sed -e '1,5d' HUGEFILE) > HUGEFILE.new 
    
    • উদাহরণস্বরূপ: হগজিফল থেকে সম্পাদিত রেখার আগে সমস্ত লাইন বেছে নিন (যা এই ক্ষেত্রে শীর্ষ 3 লাইন), এটি সম্পাদিত রেখাগুলির সাথে একত্রিত করুন (এই ক্ষেত্রে লাইন 4 এবং 5) এবং প্রতিস্থাপনের জন্য এই সংযুক্ত রেখার সেটটি ব্যবহার করুন সমতুল্য (এক্ষেত্রে শীর্ষ 5 লাইন) হুগফায়ালে এবং এগুলি সমস্ত নতুন ফাইলে লিখুন।

    HUGEFILE.newএখন আপনার সম্পাদিত ফাইল হবে, আপনি আসলটি মুছতে পারেন HUGEFILE


30

এটি বহু বছর ধরে পুনরাবৃত্তি হওয়া প্রশ্ন। (সংখ্যাগুলি পরিবর্তন হতে থাকে, তবে ধারণাটি একই রকম: আমি মেমরির চেয়ে বড় ফাইলগুলি কীভাবে দেখতে বা সম্পাদনা করব?)

স্পষ্টতই moreবা lessনিছক ফাইলগুলি পড়ার জন্য ভাল পন্থা --- lessএমনকি viস্ক্রোলিং এবং অনুসন্ধানের জন্য কীবাইন্ডিংয়ের মতো অফার ।

"বড় ফাইলগুলিতে" একটি ফ্রেশমিট অনুসন্ধান পরামর্শ দেয় যে দুটি সম্পাদক আপনার প্রয়োজনের জন্য বিশেষভাবে উপযুক্ত হবে।

একটি হ'ল lfhex ... একটি বৃহত ফাইল হেক্স সম্পাদক (যা Qt এর উপর নির্ভর করে)। স্পষ্টতই এটি জিওআই ব্যবহার করে।

অন্যটি কনসোল ব্যবহারের জন্য উপযুক্ত বলে মনে হচ্ছে: হেড ... এবং এটি দাবি করেছে একটি vimপছন্দযুক্ত ইন্টারফেস রয়েছে (একটি exমোড সহ ?)।

আমি নিশ্চিত যে আমি লিনাক্স / ইউনিক্সের অন্যান্য সম্পাদকদের দেখেছি যারা সম্পূর্ণরূপে স্মৃতিতে লোড না করে ফাইলের মাধ্যমে পৃষ্ঠাগুলি সরবরাহ করতে সক্ষম হয়েছিল। তবে আমি তাদের কোনও নাম মনে করতে পারি না। এই সম্পাদকের সাথে অন্যদের লিঙ্ক যুক্ত করতে উত্সাহিত করার জন্য আমি এই প্রতিক্রিয়াটিকে "উইকি" এন্ট্রি করছি। (হ্যাঁ, আমি ব্যবহার করে ইস্যুটি সম্পর্কে কাজ করার উপায়গুলির সাথে পরিচিত splitএবং cat; তবে আমি সম্পাদকদের, বিশেষত কনসোল / অভিশাপ সম্পাদকদের কথা ভাবছি যা এটি সরবরাহ করতে পারে এবং আমাদের সাথে সময় / বিলম্ব এবং ডিস্ক স্পেসের ওভারহেড বাঁচাতে পারে যা এই ধরণের পদ্ধতির অন্তর্ভুক্ত থাকে) ।


23

যেহেতু আপনার আসলে ফাইলটি সম্পাদনা করার দরকার নেই:

  1. view(বা vim -R) বড় ফাইলগুলিতে যুক্তিসঙ্গতভাবে ভাল কাজ করা উচিত।
  2. অথবা আপনি ব্যবহার করতে পারেন moreবাless

"চোকস" বলতে আপনার অর্থ কি খুলতে একটু সময় লাগবে? নাকি আসলে ক্রাশ? আমার সাম্প্রতিককালের লিনাক্স বাক্সে ২.7 গিগাবাইট ফাইল খোলার জন্য view(মাত্র চেষ্টা করা ও সময়সাপেক্ষে) কিছুটা সময় নেবে । মঞ্জুর, এটি তাত্ক্ষণিকভাবে নয়, তবে এটি কাজ করে।
ChssPly76

হ্যাঁ এটি স্টল। আমি নিশ্চিত যে আমি অপেক্ষা করলে এটি শেষ পর্যন্ত খুলবে। আমি কম নিয়ে গিয়েছি কারণ এটি অবিলম্বে খোলে এবং আমি নেভিগেশনে অভ্যস্ত।
হুজু

9

আমি ফ্লোরিয়ার উত্তরের উপর ভিত্তি করে একটি ছোট স্ক্রিপ্ট লিখেছিলাম যা ন্যানো (আমার প্রিয় সম্পাদক) ব্যবহার করে:

#!/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 লাইনগুলি স্বয়ংক্রিয়ভাবে আপনার সংরক্ষিত রেখাগুলির সাথে ওভাররাইট হয়ে যাবে।


3

আমার একই সমস্যা ছিল, তবে এটি একটি 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 ..
স্মার

ধন্যবাদ @ স্টিভ ম্যাককুলি! চমৎকার কাজ. এই প্রশ্নের উত্তর অনুসন্ধান করার সময় আমি ঠিক কী খুঁজছিলাম।
নেট রিটার

3

বিশাল ওয়ান-লাইনারের জন্য (এর থেকে অক্ষর মুদ্রণ 1করে 99):

cut -c 1-99 filename

2

এটি ইতিমধ্যে দেরি হয়ে গেছে তবে আপনি যদি ফাইলটি সম্পাদনা না করেই সন্ধান catকরতে চান তবে কাজটিও করতে পারেন।

% cat filename | less

বা বিকল্প হিসাবে সহজ:

% less filename

8
দ্রষ্টব্য যে catপ্রথমে ফাইলটি টাইিং করা অত্যন্ত নির্বোধ, কারণ এর অর্থ হয় ফাইলটি সম্পূর্ণরূপে মেমরির মধ্যে থাকবে (সুতরাং ফাইলটি সন্ধান করতে পারে less) বা এটি সন্ধান করা যায় না; catকেবল স্থির আউটপুট স্ট্রিম দেয়।
স্মার

1

ইমাসগুলি 100 মেগাবাইটের ফাইলগুলির সাথে খুব ভালভাবে কাজ করে, আমি খুব বেশি ঝামেলা ছাড়াই লগ ফাইলগুলিতে এটি ব্যবহার করেছি।

তবে সাধারণত যখন আমার একধরনের বিশ্লেষণের কাজ হয়, আমি পার্ল স্ক্রিপ্টটি লেখার চেয়ে আরও ভাল পছন্দ খুঁজে পাই।


0

পুরানো সুতো তবে তবুও (পুণ :) :)।

 $less filename

কম সম্পাদন করে দক্ষতার সাথে কাজ করে যদি আপনি সম্পাদনা করতে না চান এবং কেবল চারপাশে দেখুন যা বিশাল লগ ফাইলগুলি পরীক্ষা করার ক্ষেত্রে the

Vi এর মতো কম কাজের সন্ধান করুন

সেরা অংশ, এটি বেশিরভাগ ডিস্ট্রোজে ডিফল্টরূপে উপলব্ধ। সুতরাং পাশাপাশি উত্পাদন পরিবেশের জন্য সমস্যা হবে না।


650MB টেক্সট ফাইলটিতে কম অনুসন্ধান করা পিআইটিএ হিসাবে প্রমাণিত হয়নি। লার্জফাইলে উইম ব্যবহার করা কবজির মতো কাজ করে।
মারিউসিসিসি

2
@ মারিয়াসসিসি তারপর আপনি 2 জিবি-র বেশি ফাইলের সাথে কাজ করেন নি, আপনার কবজটি ক্র্যাশ হয়ে যাবে!
ডিপডাইভ

-15

এটি পুরানো তবে, ন্যানো, ভিম বা জিভিম ব্যবহার করুন


5
এই সরঞ্জামগুলি সমস্যা সমাধানের জন্য কিছুই করে না।
ডগ ওল্ফগ্রাম

1
ন্যানো স্মৃতি পূরণ করে এবং আমার উপর মারা যায়।
ট্রিনিঙ্কিউইচ মারিউজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.