बहु-गीगाबाइट पाठ फ़ाइलों को कैसे संपादित करें? विम काम नहीं करता है = ([बंद]


112

क्या कोई संपादक हैं जो बहु-गीगाबाइट पाठ फ़ाइलों को संपादित कर सकते हैं, शायद केवल एक बार में ही छोटे हिस्से को मेमोरी में लोड करके? ऐसा नहीं लगता कि विम इसे संभाल सकता है = (


मैंने वास्तव में बड़े डेटा अधिग्रहण फ़ाइलों को विम में लोड किया है, और इसने उन्हें समस्या के बिना नियंत्रित किया है।
रूक

आपकी संपादन आवश्यकताओं के आधार पर, आप बस खोज या प्रतिस्थापन करने के लिए इसे sed या पर्ल जैसी किसी चीज़ के माध्यम से पाइप करने में सक्षम हो सकते हैं।
एल योबो

23
वास्तव में यह ऑफ-टॉपिक नहीं है, कई प्रोग्रामर वीआई का उपयोग करते हैं, कभी-कभी यूआई संपादक के पूरक के रूप में। टॉपिक प्रश्न वास्तविक समस्या के बारे में है। हम सभी इस तरह के कार्य के लिए केवल दो ऐसे अच्छे स्विस आर्मी टूल जानते हैं, इसलिए कृपया विम को बहुत अधिक आकर्षक या ऑफ-साइट न समझें। एसओ लोगों के लिए है।
शालोमोइर लेनार्ट

इसे बंद करने के बजाय, इसे सुपरयूज़र या लिनक्स / यूनिक्स, या वीआईएम में क्यों नहीं ले जाना चाहिए?
user1271772

जवाबों:


72

आप * nix पर हैं (यह मानते हुए आप फ़ाइल के केवल भागों (और शायद ही कभी) को संशोधित करने के लिए है), तो आप फ़ाइलें (का उपयोग कर विभाजित कर सकते हैं splitकमान), उन्हें अलग-अलग संपादित करें (का उपयोग करते हुए awk, sed, या कुछ इसी तरह) और आप के बाद उन्हें श्रेणीबद्ध कार्य पूर्ण।

cat file2 file3 >> file1

10
महान टिप। मेरे पास एक 13GB (152.000.000 लाइनें) sql-file थी, और बस "स्प्लिट -l 1000000" का उपयोग करके फिर एक मिलियन लाइन फाइलों को एडिट करना, जहाँ मुझे vim के साथ काम करना था। उन्हें विभाजित करने के लिए सिर्फ 10 मिनट का समय लगा। (मैंने मूल फ़ाइल को विम के साथ खोलने की कोशिश की और यह काम किया, लेकिन यह प्रयोग करने योग्य होने के लिए बहुत धीमा था।)
क्लेज़ मोगेन

149

Ctrl-C फ़ाइल लोड को रोक देगा। यदि फ़ाइल काफी छोटी है, तो आप भाग्यशाली हो सकते हैं कि सभी सामग्रियों को लोड किया गया है और बस किसी भी पोस्ट लोड कदम को मार दिया है। सत्यापित करें कि इस टिप का उपयोग करते समय पूरी फ़ाइल लोड की गई है।

विम बड़ी फ़ाइलों को बहुत अच्छी तरह से संभाल सकता है। मैंने सिर्फ एक 3.4GB फ़ाइल, लाइनों को हटाने, आदि को ध्यान में रखने के लिए तीन चीजों को संपादित किया:

  1. Ctrl-C दबाएं: Vim प्रारंभ में पूरी फ़ाइल में पढ़ने की कोशिश करता है, वाक्यविन्यास हाइलाइटिंग और फ़ाइल में लाइनों की संख्या, आदि करने के लिए Ctrl-C इस गणना (और सिंटैक्स हाइलाइटिंग) को रद्द कर देगा, और यह केवल वही लोड करेगा जो क्या है अपनी स्क्रीन पर प्रदर्शित करने की आवश्यकता है।
  2. Readonly: Vim पढ़ने की संभावना तभी शुरू होगी जब फ़ाइल बनाने के लिए फ़ाइल बहुत बड़ी हो। संपादन पर प्रदर्शन करने के लिए फाइल कॉपी। मुझे w करना था! फ़ाइल को बचाने के लिए, और जब सबसे अधिक समय लगता है।
  3. लाइन पर जाएं: टाइपिंग :115355आपको सीधे 115355 लाइन पर ले जाएगी, जो उन बड़ी फाइलों में बहुत तेजी से जा रही है। विम हर बार शुरू से ही स्कैनिंग शुरू कर देता है, जब यह लाइनों के एक बफर को लोड करता है, और फ़ाइल के माध्यम से स्कैन करने के लिए Ctrl-F को दबाकर रखने से लगता है कि इसके अंत के पास वास्तव में धीमा है।

नोट - यदि आपका वीआईएम उदाहरण आसानी से है क्योंकि आपने Ctrl-C मारा है, तो संभव है कि विम ने पूरी फाइल को बफर में लोड न किया हो। यदि ऐसा होता है, तो इसे सहेजना केवल वही बचाएगा जो बफर में है, न कि पूरी फाइल । आप Gयह सुनिश्चित कर सकते हैं कि आपकी फ़ाइल की सभी पंक्तियाँ वहाँ हैं या नहीं।


14
इस सलाह का उपयोग करके 44 गीगाबाइट विकिपीडिया xml डंप से निपटने में सक्षम था। (Ctrl-C)।
vancan1ty

1
खिड़कियों पर 2.5GB लॉग फ़ाइल के अंत को पढ़ने की कोशिश की। जीवीएम में खुलने पर मेमोरी एरर का परिणाम होता है जब यह 2GB मेमोरी से अधिक हो जाता है। Ctrl-c ट्रिक को आजमाते समय, इसने फाइल को मेमोरी में लोड करना बंद कर दिया, लेकिन केवल उस फाइल के हिस्से को देखने की अनुमति दी जिसे gvim लोड करने में सक्षम था। तो अब मैं ctrl-c को उस फाइल के अधिक दबाने से पहले इंतजार कर रहा था जिसे मैं देख सकता था। फ़ाइल के अंत में नेविगेट करना या फ़ाइल के बाकी हिस्सों को लोड करना असंभव था (या मुझे नहीं पता कि कैसे)। Kinda निराशाजनक है कि विम कार्य करने के लिए नहीं था: (अंत में मैंने कुछ मुफ्त समर्पित उपकरण का उपयोग करके फ़ाइल को 100MB फ़ाइलों में विभाजित किया।
slawek

14
मेरे लिए काम नहीं करता है। मैं एक 3GB फ़ाइल लोड करता हूं, ctrl-c दबाता हूं और फिर सामग्री दिखाई देती है। मैं स्क्रॉल आदि को संपादित कर सकता हूं, लेकिन जब मैं लोड किए गए भाग के अंत में पहुंचता हूं (मान लें कि 5%) तो यह अब लोड नहीं होगा (मैं फ़ाइल के उस भाग के साथ फंस गया हूं जो शुरू में उस बिंदु पर लोड होता है जिसे मैंने ctrl-c दबाया था)
पेट्रीक

1
पुष्टि की, user3338098। यदि आप Ctrl-C दबाते हैं और यह पूरी फ़ाइल को लोड नहीं करता है (जैसा कि अन्य लोगों ने बात की है), तो इसे सहेजने से केवल वही बचता है जो आपने लोड किया है। शायद इसीलिए यह पहली जगह पर आसानी से पहुंच जाता है। मैं ध्यान दें कि मेरे Readonly बिंदु को अद्यतन करेगा।
एरोन आर

16
इन निर्देशों का पालन करने से मुझे एक बड़ी फ़ाइल को नष्ट करना पड़ा, जिसे मैंने अभी डाउनलोड किया था। आपको बिंदु 2 को पूरी तरह से हटाने की आवश्यकता है क्योंकि यह मूल रूप से निर्देश देता है जो डेटा हानि का कारण बनता है, जिसका आप पोस्ट के अंत तक उल्लेख नहीं करते हैं।
नियोबाइट

75

यह प्लगइन्स हो सकता है जो इसे चोक करने का कारण बन रहा है। (वाक्य रचना हाइलाइटिंग, सिलवटों आदि)

आप प्लगइन्स के बिना विम चला सकते हैं।

vim -u "NONE" hugefile.log

यह न्यूनतम है, लेकिन यह आपको कम से कम आपके द्वारा उपयोग किए जाने वाले vi गतियों को देगा।

syntax off

एक और स्पष्ट है। अपने इंस्टॉल डाउन और सोर्स को प्रून करें जो आपको चाहिए। आपको पता चल जाएगा कि यह क्या करने में सक्षम है और यदि आपको अन्य माध्यमों से किसी कार्य को पूरा करने की आवश्यकता है।


3
यह अभी भी पूरी फाइल को RAM में लोड करता है ...
Totor

@ हाँ, मैं पहले फ़ाइल को विभाजित कर दूंगा लेकिन उस सेटिंग से आपको यादृच्छिक ऑटोकॉमैंड्स को बंद करके सबसे अच्छा प्रदर्शन मिलेगा। वह मेरी बात थी। सभ्य मेमोरी के साथ वर्कस्टेशन एक टमटम के पास आने वाली फाइलों को संभालने में सक्षम होना चाहिए।
माइकल

2
जब फ़ाइल वर्चुअल मेमोरी के 10 गुना आकार की हो, तो vim / vi बेकार है?
user3338098

1
मैंने 2 सेकंड से कम समय में 250MB फ़ाइल खोलने के लिए इस कमांड का उपयोग किया। कमाल
user674669

20

विभाजन + विम समाधान के साथ @Al पचियो द्वारा दिए गए उत्तर पर एक मामूली सुधार आप एक ग्लोब के साथ फ़ाइलों को पढ़ सकते हैं, प्रभावी ढंग से फ़ाइल चंक्स का उपयोग बफर के रूप में कर सकते हैं।

$ split -l 5000 myBigFile
xaa
xab
xac
...

$ vim xa*
#edit the files

:nw  #skip forward and write
:n!  #skip forward and don't save 

:Nw  #skip back and write
:N!  #skip back and don't save

15

आप इस VIM प्लगइन को देखना चाहते हैं, जो बड़ी फ़ाइलों को लोड करते समय गति के हित में कुछ विशेष विशेषताओं को निष्क्रिय करता है।


8

मैंने ऐसा करने की कोशिश की है, ज्यादातर जब मैं एक SQL डंप में कुछ छोटे बदलाव करने की आवश्यकता होती है, तो 1 जीबी के आसपास की फाइलों के साथ। मैं विंडोज पर हूं, जो इसे एक प्रमुख दर्द बनाता है। यह गंभीर रूप से कठिन है।

स्पष्ट सवाल है "आपको इसकी आवश्यकता क्यों है?" मैं आपको एक से अधिक बार यह प्रयास करने के अनुभव से बता सकता हूं, आप वास्तव में एक और तरीका खोजने की कोशिश करना चाहते हैं।

तो आप इसे कैसे करते हैं? मेरे द्वारा किए गए कुछ तरीके हैं। कभी-कभी मुझे फ़ाइल खोलने के लिए विम या नैनो मिल सकती है, और मैं उनका उपयोग कर सकता हूं। यह वास्तव में कठिन दर्द है, लेकिन यह काम करता है।

जब वह काम नहीं करता है (आपके मामले में) तो आपके पास केवल कुछ विकल्प हैं। आप अपने द्वारा आवश्यक परिवर्तन (उदाहरण के लिए, खोज और प्रतिकृति) बनाने के लिए एक छोटा सा कार्यक्रम लिख सकते हैं। आप एक कमांड लाइन प्रोग्राम का उपयोग कर सकते हैं जो इसे करने में सक्षम हो सकता है (शायद यह sed / awk / gpp और आदि के साथ पूरा किया जा सकता है?)

अगर वे काम नहीं करते हैं, तो आप हमेशा फ़ाइल को विखंडू में विभाजित कर सकते हैं (कुछ ऐसा है जैसे विभाजन स्पष्ट पसंद हो, लेकिन आप जिस भाग को चाहते हैं उसे प्राप्त करने के लिए सिर / पूंछ का उपयोग कर सकते हैं) और फिर उस हिस्से को संपादित करें जिसे इसकी आवश्यकता है, और बाद में पुनर्संयोजन करें।

हालांकि मुझ पर भरोसा करें, दूसरा रास्ता खोजने की कोशिश करें।


3
आमतौर पर इस तरह के मामलों में sed आपके दोस्त होते हैं। आपके संपादक को वास्तव में किसी फ़ाइल के शीर्ष पर कुछ वर्ण सम्मिलित करने और यह पता लगाने के बारे में पसंद नहीं है कि कैसे सब कुछ नीचे धकेल दिया जाए।
dkretz

@ एल डोरफ़िएर: हां। जब मैंने खोज / प्रतिस्थापन करना था तो मैंने sed का उपयोग किया। जब मुझे एक फ़ाइल से कुछ लाइनों को हटाना पड़ा, जैसे कि (कुछ पागलपन भरी लंबी लाइनें) तो मैं इसे करने में कामयाब रहा, लेकिन जैसा कि आप अनुमान लगा सकते हैं कि लाइनों के बीच (साथ ही वास्तविक विलोपन) काफी समय ले चुका है (सेकंड + प्रतिसाद देने के लिए और redraw)। मैं उन लाइनों में से एक को भी कुछ अक्षरों को जोड़ने का प्रयास नहीं करना चाहता।
MBCook

एक ही समस्या .... एक बड़ी तालिका के लिए SQL स्क्रिप्ट के शीर्ष पर एक "उपयोग" कथन, या एक फ़ाइल समूह जो लक्ष्य प्रणाली में मौजूद नहीं है। मैं उन्हें फ्रीज़ करने के लिए फ्री फाइल स्प्लिटर का उपयोग करता हूं, कमांड लाइन नीचे फिर से जुड़ने के लिए।
अपराह्न

6

मुझे लगता है कि हेक्स संपादकों के लिए बड़ी फ़ाइलों को संभालना सामान्य है। विंडोज पर, मैं एचएक्सडी का उपयोग करता हूं , जो 8 ईबी (8 बिलियन गीगाबाइट) तक की फाइलों को संभालने का दावा करता है।


14
मुझे यह जानने में दिलचस्पी होगी कि उन्होंने कैसे परीक्षण किया है कि ...: P
छाया

लिनक्स पर मेरा सुझाव हैhexedit
elig

4

मैं बहु-गीगाबाइट सादे पाठ फ़ाइलों को संभालने के लिए चार्ल्स कैंपबेल द्वारा लार्जफाइल प्लगइन के साथ Win7 x64 पर vim 7.3.3 का उपयोग कर रहा हूं । यह वास्तव में अच्छी तरह से काम करता है।

मुझे उम्मीद है कि आप सही आएंगे।


आप प्लगइन को कैसे निष्क्रिय कर सकते हैं? जैसे किसी अन्य फ़ाइल को Vim में खोलने पर दोबारा काम करने के लिए हाइलाइटिंग जैसे अन्य एक्सटेंशन प्राप्त करना?
hhh

3

वाह, एक जीबी या दो के साथ भी, कभी-कभी चोक करने के लिए विम पाने में कामयाब नहीं हुआ। मैंने सुना है कि UltraEdit (विंडोज पर) और BBEdit (Mac पर) और भी बड़ी फ़ाइलों के लिए उपयुक्त हैं, लेकिन मुझे कोई व्यक्तिगत अनुभव नहीं है।




2

मैंने सुपर बड़े लॉग फ़ाइलों के लिए एफएआर कमांडर के अंतर्निहित संपादक / दर्शक का उपयोग किया है।



1

केवल एक चीज जो मैं अपने पसंदीदा मैक हेक्स संपादक के लिए उपयोग करने में सक्षम हूं, 0XED। हालाँकि, यह उन फाइलों के साथ था, जिन्हें मैंने दसियों मेगाबाइट्स में बड़ा माना था। मुझे यकीन नहीं है कि यह कितनी दूर तक जाएगा। मुझे पूरा यकीन है कि यह केवल एक बार में फ़ाइल के कुछ हिस्सों को मेमोरी में लोड करता है।


0

अतीत में मैंने सफलतापूर्वक एक विभाजन / संपादन / दृष्टिकोण का उपयोग किया है जब फाइलें बहुत बड़ी हो जाती हैं। इस काम के लिए आपको यह जानना होगा कि मूल फ़ाइल में टू-एडेड टेक्स्ट कहां है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.