बिल्ली के साथ केवल अजीब लाइनें दिखाएं


28

नमस्ते,

शायद यह कुछ बहुत आसान है, लेकिन मुझे अब यह बात नहीं मिली। लिनक्स में, शेल, एक टेक्स्ट फ़ाइल दी गई है, मैं कुछ ऐसा कैसे कर सकता हूं, बिल्ली का नाम इसलिए मैं केवल पहली पंक्ति, तीसरी पंक्ति, 5, 7, 9 और इसी तरह देख सकता हूं?

अगर बिल्ली के साथ नहीं, तो किसी अन्य कमांड के साथ

धन्यवाद

bash 

जवाबों:


42

का उपयोग करते हुए awk:awk 'NR % 2 == 0' filename

संपादित करें: निकाल दिया गया {print}, जैसा कि घोस्टडॉग74 के उत्तर में दिखाया गया है और रॉबर्टो बोनालेट द्वारा टिप्पणी की गई है।


1
{print}डिफ़ॉल्ट क्रिया है, इसलिए awk 'NR % 2 == 0' < myfileपर्याप्त है।

3
@roberto, इनपुट पुनर्निर्देशन की जरूरत नहीं है।
user31894

1
एक नोट के रूप में, यह रेखाएँ भी दिखाता है (जहाँ पहली पंक्ति 1 है) और विषम रेखाएँ (यदि आप पहली पंक्ति को 0 मानते हैं)। विपरीत के लिए के 2 == 0साथ बदलें 2 == 1
cde

13

या कुछ पसंद है

sed -n 'p;n' filename

स्पष्टीकरण के लिए मैन पेज देखें sed


यह पोर्टेबल sedवर्जन है जिसने मेरा दिमाग खिसका दिया।
क्रिस जॉन्सन

1
आप आसानी से छोड़ सकते हैं लाइनों बताएं sed -n '1d;p;n'उदाहरण के लिए भी लाइनों के लिए
kisp

7

Sed का उपयोग करें:

sed -n 1~2p filename

1
यह एक GNU एक्सटेंशन है। यह कार्य प्रणाली नहीं हो सकती है जहां GNU sedडिफ़ॉल्ट नहीं है।
क्रिस जॉन्सन

यह सच है लेकिन लिनक्स के अधिकांश जायके के साथ काम करना चाहिए

हम्म .. मैंने सिर्फ "sed --posix -n 1 ~ 2p फ़ाइल नाम" की कोशिश की और वह भी काम करने लगता है। माना जाता है कि - एक्सपिक्स ग्नू एक्सटेंशन के लिए समर्थन को हटाने वाला है।

GNU sedमैनुअल gnu.org/software/rew/manual/html_node/Addresses.html#Addresses "पहला ~ यह GNU एक्सटेंशन ..." कहता है। इसका उल्लेख नहीं है --posix। जब मैं कोशिश करता हूं gsed --posix -n 1~2p(जीएनयू sed 4.2.1), मुझे मिलता है gsed: -e expression #1, char 2: unknown command: ‘~’
क्रिस जॉन्सन

ठीक है .. समझ में आता है। पता नहीं क्या मेरे sed के साथ गलत है मैं cygwin का उपयोग कर रहा हूं, ताकि इसके साथ कुछ हो सके।


2

2 तरीके आप इसे जागरण के साथ कर सकते हैं

$ awk '{getline;print}' file # the equivalent of the selected sed answer
$ awk 'NR%2==0' file

या सिर्फ खोल के साथ

i=1; while read -r line; do [ $((i++ % 2)) -eq 0 ] && echo $line; done <"file"


0

इस परीक्षण नहीं किया (मैक ओएस एक्स पर काम करने के लिए प्रतीत नहीं होता है), लेकिन जीएनयू का समर्थन करता है sed first~stepएक पते चयन के रूप में है, तो उदाहरण के लिए:

sed -n 1~2p file

पहली पंक्ति में शुरू होगा और उसके बाद हर दूसरी लाइन को प्रिंट करेगा।


सही है, यह एक GNU एक्सटेंशन है। मैक ओएस एक्स sedबेस इंस्टॉलेशन में बीएसडी का उपयोग करता है ।
क्रिस जॉन्सन

-1

परीक्षण करने में असमर्थ, एक लिंक मिला: cat -n $ 1 | grep "$ ODDRE" | cut -b 8-> oddfile। $$


आप सबसे महत्वपूर्ण बात ... क्या चूक ODDREको तैयार है। लेकिन है कि इसका जवाब केवल यदि फ़ाइल लाइनों एक लाख से भी कम है काम करेंगे।
एंड्रयू मैकग्रेगर

-2

परिणाम की आवश्यकता के लिए आप इन आदेशों का उपयोग कर सकते हैं

जाग 'एनआर% 2 == 1'

sed -ne '1 ~ 2p'


2
-1। यह लगभग 10 साल पहले के उत्तरों की नकल करता है, मामूली अंतर को बिल्कुल भी नहीं समझाया गया है। और ls -lयहाँ क्यों है ?
कामिल Maciorowski
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.