2011-06-01 11 views
5

मेरे पास एक लिनक्स सिस्टम पर एक फ़ाइल है जो लगभग 10 जीबी है। इसमें 20,000,000 बाइनरी रिकॉर्ड हैं, लेकिन प्रत्येक रिकॉर्ड को एएससीआईआई डिलीमीटर "$" से अलग किया जाता है। मैं फ़ाइल को छोटे हिस्सों में बदलने के लिए स्प्लिट कमांड या उसके कुछ संयोजन का उपयोग करना चाहता हूं। आदर्श रूप में मैं यह निर्दिष्ट करने में सक्षम हूं कि कमांड को प्रत्येक 1,000 रिकॉर्ड्स (इसलिए प्रत्येक 1,000 डिलीमीटर) अलग फाइलों में विभाजित करना चाहिए। क्या कोई इसके लिए सहायता कर सकता है?डिलिमिटर पर एक फ़ाइल को विभाजित करना

उत्तर

5

समस्या का एकमात्र अपरंपरागत हिस्सा रिकॉर्ड विभाजक प्रतीत होता है। मुझे यकीन है कि यह बहुत ही सरल में ठीक है - लेकिन मुझे awk से नफरत है।

मैं 'सामान्य' समस्याओं के दायरे में पहली बार यह हस्तांतरण होगा:

tr '$' '\n' < large_records.txt | split -l 1000 

डिफ़ॉल्ट रूप से हो जाएगा ताकि बनाने xaa, xab, xac ... फ़ाइलें; और अधिक विकल्प

+0

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

+1

Ermmm ... मैंने आपके लिए मैनपेज लिंक तय किया है; ['विभाजन ... -ए 7'] (http://unixhelp.ed.ac.uk/CGI/man-cgi?split) अच्छी तरह से – sehe

+0

उत्कृष्ट होना चाहिए। बहुत अच्छा काम करता है! –

2

के लिए man split देखो मैं प्यार करता हूँ awk :)

BEGIN { RS="$"; chunk=1; count=0; size=1000 } 
{ 
    print $0 > "/tmp/chunk" chunk; 
    if (++count>=size) { 
     chunk++; 
     count=0; 
    } 
} 

(ध्यान दें कि awk में पुनर्निर्देशन ऑपरेटर केवल ट्रंकेटस/इसके पहले मंगलाचरण पर फ़ाइल बनाता है - बाद संदर्भ संलग्न आपरेशन के रूप में लिया जाता है - के विपरीत खोल पुनर्निर्देशन)

1

डिफ़ॉल्ट रूप से सुनिश्चित करें कि एक बार उस पर 2. अधिक जानकारी के डिफ़ॉल्ट प्रत्यय सीमा की अधिकतम सीमा तक पहुंच जाता यूनिक्स विभाजन प्रत्यय के साथ निकास होगा: https://www.gnu.org/software/coreutils/manual/html_node/split-invocation.html

संबंधित मुद्दे