लिनक्स "कैट" कमांड के साथ, मैं संख्या के आधार पर केवल कुछ लाइनें कैसे दिखा सकता हूं


59

यदि मैं cat -n text.txtस्वचालित रूप से लाइनों की संख्या का उपयोग करता हूं, तो मैं केवल कुछ गिने पंक्तियों को दिखाने के लिए कमांड का उपयोग कैसे करूं।


1
"केवल निश्चित संख्या वाली रेखाएं दिखाएं" से आपका क्या मतलब है, क्या आप एक अपेक्षित आउटपुट डाल सकते हैं?
tachomi

1
शायद ऐसा करने के लिए एक लाख तरीके होने जा रहे हैं। tail+ headयह भी कर सकते हैं, जैसा किawk
ब्राचली

जवाबों:


120

उपयोग sed

प्रयोग

$ cat file
Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8
Line 9
Line 10

एक लाइन प्रिंट करने के लिए (5)

$ sed -n 5p file
Line 5

कई पंक्तियों को प्रिंट करने के लिए (5 और 8)

$ sed -n -e 5p -e 8p file
Line 5
Line 8

विशिष्ट रेंज प्रिंट करने के लिए (5 - 8)

$ sed -n 5,8p file
Line 5
Line 6
Line 7
Line 8

अन्य विशिष्ट लाइन के साथ रेंज प्रिंट करने के लिए (5 - 8 और 10)

$ sed -n -e 5,8p -e 10p file
Line 5
Line 6
Line 7
Line 8
Line 10

27

इसे करने का एक तरीका यह है sed:

cat -n text.txt | sed '11d'

जहां 11 आपके द्वारा हटाई गई पंक्ति की संख्या है।

या सभी को हटाने के लिए लेकिन 11:

cat -n text.txt | sed '11!d'

रंग भी संभव हैं:

cat -n text.txt | sed '9,12!d'

और cat -nजरूरत भी नहीं है:

sed '9,12!d' text.txt

9

आप सीधे जाग का उपयोग कर सकते हैं।

awk 'NR==1' file.txt

वांछित पंक्ति संख्या के साथ '1' की जगह।


1
यह एक लाख मील की दूरी पर सबसे अच्छा जवाब है और इसके मुकाबले बहुत अधिक प्यार का हकदार है।
रेन

8

लक्ष्यों के आधार पर मुझे सिर या ग्रीप पसंद है

cat /var/log/syslog -n | head -n 50 | tail -n 10

50 के माध्यम से 41 लाइनों को वापस करेगा।

या

cat /var/log/syslog -n | grep " 50" -b10 -a10

40 लाइनों को दिखाएगा।

लॉग फ़ाइलों को पार्स करने के लिए दोनों काफी उपयोगी हैं।


catहालांकि न तो उदाहरण की जरूरत है
रोएमा

1
अच्छा हाँ ... लेकिन .... लेकिन .... ..... बेहतर तरीके हैं। सवाल हालांकि बिल्ली का उपयोग करने के बारे में पूछा गया था, इसलिए मैंने इसका इस्तेमाल किया।
coteyr

catओपी जो चाहता है वह नहीं कर सकता
रोआमा

2

जैसा कि दूसरों ने आपको दिखाया है, उपयोग करने की कोई आवश्यकता नहीं है cat -n। अन्य कार्यक्रम इसे आपके लिए करेंगे। यदि, हालांकि, आपको वास्तव में cat -nकेवल विशिष्ट लाइनों को दिखाने और आउटपुट दिखाने की आवश्यकता है (उदाहरण के लिए, 4-8, 12 और 42), तो आप यह कर सकते हैं:

$ cat -n file | awk '$1>=4 && $1<=8 || $1==12 || $1==42'
 4  Line 4
 5  Line 5
 6  Line 6
 7  Line 7
 8  Line 8
12  Line 12
42  Line 42

में awk, $1पहला क्षेत्र है, इसलिए यह कमांड उन सभी लाइनों को प्रिंट करता है जिनके पहले क्षेत्र i हैं) 4 और 8 (सम्मिलित) या ii) 12 या iii) 42 के बीच।

यदि आप cat -nफ़ाइल से मूल पंक्तियाँ प्राप्त करने के लिए जोड़ा गया क्षेत्र हटाना चाहते हैं , तो आप यह कर सकते हैं:

$ cat -n file | awk '$1>=4 && $1<=8 || $1==12 || $1==42{sub(/^\s*[0-9]+\s*/,""); print}'
Line 4
Line 5
Line 6
Line 7
Line 8
Line 12
Line 42
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.