2010-09-04 8 views
7

मैं कहीं बीच में एक मार्कर के साथ एक पाठ फ़ाइल है:विभाजित पाठ फ़ाइल का उपयोग बैश स्क्रिप्ट

one 
two 
three 
blah-blah *MARKER* blah-blah 
four 
five 
six 
... 

मैं सिर्फ पहली मार्कर से पहले सब कुछ युक्त, दो फ़ाइलों में इस फ़ाइल को विभाजित करने के लिए की जरूरत है, और दूसरा जिसमें मार्कर के बाद सबकुछ शामिल है। ऐसा लगता है कि यह एक लाइन में अजीब या sed के साथ किया जा सकता है, मैं बस यह पता नहीं लगा सकता कि कैसे।

मैंने सीएसप्लिट का उपयोग करके आसान तरीका की कोशिश की, लेकिन सीएसप्लिट यूनिकोड टेक्स्ट के साथ अच्छी तरह से नहीं खेलता है। एक में आदि

awk '/MARKER/{n++}{print >"out" n ".txt" }' final.txt 

यह final.txt से इनपुट पढ़ा जाएगा और out1.txt पैदा करता है, out2.txt, ...

उत्तर

4

इस प्रयास करें

sed -n -e '/MARKER/! w outputfile1' -e'/MARKER/{:a;n;w outputfile2' -e 'ba}' inputfile 
+0

लगभग काम के साथ आसानी से यह कर सकते हैं। यूटीएफ -8 को खराब नहीं करता है, लेकिन दूसरी फ़ाइल में * मार्कर * छोड़ देता है। –

+0

क्या आपने यहां दिखाए गए समाधान का प्रयास किया है: http://www.unix.com/shell-programming-scripting/41060-split-file-into-seperate-files.html - यह 'csplit' का उपयोग करता है और जिस तरह से आप चाहते हैं , यानी, मार्कर को फाइलों को बाहर निकालना। –

3
sed -n '/MARKER/q;p' inputfile > outputfile1 
sed -n '/MARKER/{:a;n;p;ba}' inputfile > outputfile2 

या सभी:

1

split कमांड वही करेगा जो आप चाहते हैं:

$ split -p '\*MARKER\*' splitee 
$ cat xaa 
one 
two 
three 
$ cat xab 
blah-blah *MARKER* blah-blah 
four 
five 
six 
$ tail -n+2 xab 
four 
five 
six 

शायद यह आपकी आवश्यकताओं के लिए पर्याप्त है।

मुझे नहीं पता कि यह यूनिकोड के साथ सीएसप्लिट की तुलना में बेहतर है या नहीं।

+0

वह विकल्प जीएनयू कोर्यूटिल्स में शामिल विभाजन के संस्करण में उपलब्ध प्रतीत नहीं होता है; मुझे लगता है कि आप कुछ स्वाद के बीएसडी का उपयोग कर रहे हैं। किसी भी मामले में, जीएनयू-आधारित ऑपरेटिंग सिस्टम जैसे अधिकांश लिनक्स डिस्ट्रोज़, कोर्यूटिल्स में स्प्लिट और सीएसप्लिट दोनों शामिल होते हैं, इसलिए उनके पास समान यूनिकोड व्यवहार होना चाहिए। –

10

आप awk

awk -vRS="MARKER" '{print $0>NR".txt"}' file 
+0

+1: इसे लुप्त करें। तो संक्षिप्त और सुरुचिपूर्ण। मुझे खराब कॉन्फ़िगर किए गए निर्माण स्क्रिप्ट से आया लॉग से बाहर कचरे के एक बड़े हिस्से को त्यागने की आवश्यकता है। – Rekin