2010-06-18 17 views
88

मैं एक विशेष लाइन नंबर से एक 400K लाइन लंबे लॉग फ़ाइल विभाजित करना चाहते हैं पर विभाजन फाइल करने के लिए।कैसे एक लाइन नंबर

इस सवाल के लिए, यह एक मनमाना संख्या 300k करने देता है।

क्या कोई लिनक्स कमांड है जो मुझे यह करने की अनुमति देता है (स्क्रिप्ट) में?

मैं split मुझे या तो आकार या लाइन नंबर से बराबर भागों में फ़ाइल विभाजित लेकिन वह नहीं है जो मैं चाहता की सुविधा देता है पता है। मैं एक फ़ाइल में पहले 300k और दूसरी फ़ाइल में अंतिम 100k चाहता हूं।

किसी भी मदद की सराहना की जाएगी। धन्यवाद!

दूसरा विचार पर इस अधिक सुपर उपयोगकर्ता या serverfault साइट के लिए अनुकूल होगा।

+13

मुझे लगता है कि यह प्रश्न ठीक है। आपके पास एक प्रोग्रामिंग कार्य है जिसे आप खोल स्क्रिप्ट के साथ हल करने का प्रयास कर रहे हैं; यदि यह व्यापक रूप से उपलब्ध यूनिक्स उपकरण का उपयोग कर एक-लाइनर है, तो उतना ही बेहतर! –

+0

मैंने वही सोचा। लेकिन फिर फिर मैं एक शेल स्क्रिप्ट नहीं लिख रहा था :) ओह ठीक है, वैसे भी मेरा जवाब मिला। धन्यवाद – denormalizer

+3

यह सवाल इम्हो ठीक है, बिना किसी संदेह के, यह एक प्रोग्रामिंग प्रश्न है और यह – Peter

उत्तर

171
file_name=test.log 

# set first K lines: 
K=1000 

# line count (N): 
N=$(wc -l < $file_name) 

# length of the bottom file: 
L=$(($N - $K)) 

# create the top of file: 
head -n $K $file_name > top_$file_name 

# create bottom of file: 
tail -n $L $file_name > bottom_$file_name 

इसके अलावा, दूसरी सोचा पर, विभाजन आपके मामले में, काम करेंगे के बाद से पहली दूसरे विभाजन से बड़ा है। स्प्लिट इनपुट का संतुलन 400K लाइनों के साथ एक इनपुट के लिए, 300k लाइनों और xab 100k के साथ लाइनों के साथ पिछले विभाजन में डालता है, इसलिए

split -l 300000 file_name

इच्छा उत्पादन xaa

+0

धन्यवाद। superuser यानी पर एक समान उत्तर प्रश्न मिला। पूंछ आदि का उपयोग करें और, हां विभाजन मेरे उदाहरण के साथ काम करेगा, लेकिन हमेशा मेरा उदाहरण 100K नहीं था। – denormalizer

+2

आप Windows पर यह करने के लिए कोशिश कर रहे हैं और Cygwin का उपयोग नहीं करना चाहते हैं, इस परियोजना देशी Win32 binaries के रूप में सभी आवश्यक utils प्रदान करता है - 'पूंछ -n http://unxutils.sourceforge.net/ –

+12

मैं का प्रयोग करेंगे + एल file_name> bottom_file' जहां 'एल = के + 1' को 'wc' पहले चलाने के लिए कोई आवश्यकता नहीं है, पहले – Hashbrown

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