2010-02-10 18 views
15

दिए गए फ़ाइल से लाइनों की एक श्रृंखला प्राप्त करें, मुझे प्रारंभ रेखा संख्या और अंत पंक्ति संख्या वाली फ़ाइल से लाइनों की एक सेट संख्या निकालने की आवश्यकता है।प्रारंभ और अंत पंक्ति संख्या

मैं इसे यूनिक्स के तहत जल्दी से कैसे कर सकता हूं (यह वास्तव में सोलारिस है इसलिए gnu स्वाद उपलब्ध नहीं है)।

Thx

+0

यह भी देखें: http://stackoverflow.com/questions/1429556/shell-bash-command-to-get-nth-line-of-stdout –

+0

संभावित डुप्लिकेट [मैं लाइनों की पूर्व निर्धारित सीमा को कैसे निकाल सकता हूं यूनिक्स पर एक टेक्स्ट फ़ाइल?] (http://stackoverflow.com/questions/83329/how-can-i-extract-a-predetermined-range-of-lines-from-a-text-file-on-unix) – lesmana

उत्तर

40

लाइनों मुद्रित करने के लिए 6-10:

sed -n '6,10p' file 

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

$ wc -l test.txt 
368048 test.txt 
$ du -k test.txt 
24640 test.txt 
$ time sed -n '10q;6,10p' test.txt >/dev/null 
real 0m0.005s 
user 0m0.001s 
sys 0m0.003s 
$ time sed -n '6,10p' test.txt >/dev/null 
real 0m0.123s 
user 0m0.092s 
sys 0m0.030s 
:

sed -n '10q;6,10p' file 

लाइनों के एक काफी बड़ी संख्या के साथ एक फ़ाइल का परीक्षण से

+0

आरागग !! :) यह मेरे – ScaryAardvark

+0

से बेहतर है मैंने इसके बारे में सोचा लेकिन इसे अन्य लाइनों को प्रिंट करना बंद नहीं कर सका .. -n विकल्प .. :) – ScaryAardvark

+3

राह sed! Sed! Sed! Sed! +1 –

0

आप के रूप में अच्छी

#!/bin/sh 
start=10 
end=20 
nawk -vs="$start" -ve="$end" 'NR>e{exit}NR>=s' file 
1

मैं एक Haskell कार्यक्रम splitter कहा जाता है वास्तव में यह करता है कि लिखा nawk साथ यह कर सकते हैं: एक read through my release blog post है।

$ cat somefile | splitter 4,6-10,50- 

कि लाइनों चार मिल जाएगा, छह से दस और लाइनों पचास के बाद:

आप इस प्रकार प्रोग्राम का उपयोग कर सकते हैं। और यह सब कुछ है कि इसके लिए है। इसे स्थापित करने के लिए आपको Haskell की आवश्यकता होगी। बस:

$ cabal install splitter 

और आप कर चुके हैं। मुझे आशा है कि आपको यह प्रोग्राम उपयोगी लगेगा।

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