लाइन नंबर पर विभाजन कैसे दर्ज करें [बंद]


94

मैं एक विशेष लाइन नंबर से 400k लाइन लंबी लॉग फाइल को विभाजित करना चाहता हूं।

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

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

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

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

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


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

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

5
यह सवाल इमो ठीक है, एक शक के बिना, यह एक प्रोग्रामिंग सवाल है और यह बहुत अधिक स्थानीयकृत भी नहीं है
पीटर

9
यह एक बंद विषय क्यों है? सोचा था कि पुलिस पहले से कहीं ज्यादा पागल है।
कारेल बिलेक

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

जवाबों:


178
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

इसके अलावा, दूसरे विचार पर, विभाजन आपके मामले में काम करेगा, क्योंकि पहला विभाजन दूसरे से बड़ा है। स्प्लिट इनपुट के शेष को अंतिम विभाजन में डालता है, इसलिए

split -l 300000 file_name

400k लाइनों के साथ एक इनपुट के लिए xaa300k लाइनों और xab100k लाइनों के साथ आउटपुट होगा ।


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

2
यदि आप विंडोज पर ऐसा करने की कोशिश कर रहे हैं और सिग्विन
जोनाथन हिल

15
मैं उपयोग करता हूँ tail -n +L file_name > bottom_fileजहाँ बस पहले L=K+1चलाने की कोई आवश्यकता नहीं हैwc
हैशब्रोवन

2
मैं बल्कि उपयोग करेंगे sed -n '1,1000p' test.log > top_test.log ; sed '1,1000d' test.log > bottom_test.log। IHMO, यह अधिक सीधा है, और लाइनों की कुल संख्या की गणना करने की आवश्यकता नहीं है। इसके अलावा, यह अभी भी काम करता है अगर प्रत्येक कमांड के निष्पादन के बीच लाइनों को जोड़ा गया था।
एंटोनी पिंसर्ड

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