पहली और आखिरी लाइनों के बिना फ़ाइल सामग्री प्रिंट करें


54

क्या कोई सरल तरीका है जिससे मैं पहली और आखिरी पंक्तियों को छोड़ कर किसी फ़ाइल को प्रतिध्वनित कर सकता हूँ? मैं से पाइपिंग देख रहा था headमें tailहै, लेकिन उन लोगों के लिए ऐसा लगता है जैसे मैं शुरू से कुल लाइनों पता करना होगा। मैं भी देख रहा था split, लेकिन मुझे इसके साथ ऐसा करने का कोई रास्ता नहीं दिख रहा है।

जवाबों:


97

बस sed, बिना किसी पाइप के:

sed '1d;$d' file.txt

ध्यान दें

  • 1मतलब पहली पंक्ति
  • dमतलब हटाओ
  • ; 2 आदेशों के लिए विभाजक है
  • $इसका मतलब यह अंतिम पंक्ति

36

आपको अग्रिम में लाइनों की संख्या जानने की आवश्यकता नहीं है। tailऔर headक्रमशः फ़ाइल की शुरुआत या अंत से ऑफसेट ले सकते हैं।

यह पाइप फाइल की दूसरी लाइन से शुरू होती है (पहली लाइन को छोड़ती है) और आखिरी में रुकती है लेकिन एक (अंतिम लाइन को छोड़ती है)। शुरुआत या अंत में एक से अधिक लाइन छोड़ने के लिए, तदनुसार संख्या समायोजित करें।

tail -n +2 file.txt | head -n -1

इसे दूसरे तरीके से करना, समान रूप से काम करता है:

head -n -1 file.txt | tail -n +2

मुझे पता नहीं क्यों, लेकिन उबंटू 14.04.2LTS पर head -n -1मेरी .txtफ़ाइल की पहली और अंतिम पंक्ति को हटा देता है ।
शोपाजो डे एरिएरेज़

9

यहाँ यह कैसे करना है awk:

awk 'NR>2 {print t} {t=$0}'

इसके लिए एक और तरीका sed:

sed '1d;x' file.txt

xउन्नत sedकमांड है, यह वर्तमान लाइन को पिछले एक के साथ स्विच करता है: करंट बफर में चला जाता है और पिछली स्क्रीन पर चला जाता है और इसी तरह से sedलाइन द्वारा लाइन को संसाधित करते समय (इस कारण पहली लाइन खाली होगी)।

awkप्रत्येक स्टेप (लाइन) पर समाधान करंट लाइन को वेरिएबल में डालता है और दूसरी लाइन द्वारा पास होने के बाद ही इसे प्रिंट करना शुरू करता है। इस प्रकार, हमें स्क्रीन पर दूसरी से अंतिम, लेकिन एक तक लाइनों के shitfed अनुक्रम मिला। अंतिम पंक्ति को छोड़ दिया गया है क्योंकि रेखा चर में है और इसे केवल अगले चरण पर मुद्रित किया जाना चाहिए, लेकिन सभी चरण पहले ही समाप्त हो चुके हैं और हम स्क्रीन पर कभी भी रेखा नहीं देखते हैं।

में एक ही विचार perl:

perl -ne 'print $t if $.>2 ; $t=$_' file.txt

$.लाइन नंबर के लिए और $_ वर्तमान लाइन के लिए खड़ा है । संरचना के
perl -nलिए शॉर्टकट है while(<..>) {..}और -eइनलाइन स्क्रिप्ट के लिए है।


2

अजगर में मैं इस तरह करना होगा।

#!/usr/bin/python3
import re
import sys
file = sys.argv[1]
with open(file, 'r') as f:
    L = []
    for line in f:
        line = re.sub(r'\n', r'', line)
        L.append(line)
    print('\n'.join(L[1:-1]))

उपरोक्त कोड को एक फ़ाइल में पेस्ट करें और इसे नाम दें script.py। उस फ़ाइल के विरुद्ध स्क्रिप्ट चलाएँ जिसे आप जाँचना चाहते हैं।

python3 script.py /path/to/the/file

उदाहरण:

$ cat file
foo
apple
banana
bar
$ python3 script.py file
apple
banana

2

मैक उपयोगकर्ताओं के लिए:

मैक पर, head -n -1काम नहीं करता है। इसके बजाय, फ़ाइल को उल्टा करें, पहली पंक्ति को काटें, फिर इसे पीछे की तरफ मोड़ें:

tail -r file.txt | tail -n +2 | tail -r

स्पष्टीकरण:

  1. tail -r : इसके इनपुट में लाइनों के क्रम को उलट देता है

  2. tail -n +2 : इसके इनपुट में दूसरी लाइन से शुरू होने वाली सभी लाइनों को प्रिंट करता है

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