linux - बैश में पहली एक्स लाइनों को छोड़ने वाली फ़ाइल प्रिंट करें




bash printing (8)

अगर आप पहली दो पंक्ति छोड़ना चाहते हैं
tail -n +3 <filename>

अगर आप पहली एक्स लाइन छोड़ना चाहते हैं
tail -n +$((x+1)) <filename>

मेरे पास एक बहुत लंबी फ़ाइल है जिसे मैं प्रिंट करना चाहता हूं लेकिन उदाहरण के लिए पहली 1e6 लाइनों को छोड़ना चाहता हूं। मैं बिल्ली आदमी पृष्ठ में देखता हूं लेकिन मुझे ऐसा करने का कोई विकल्प नहीं मिला। मैं यह करने के लिए एक कमांड की तलाश कर रहा हूं या एक साधारण बैश प्रोग्राम।


आप इसे सिर और पूंछ के आदेशों का उपयोग करके कर सकते हैं:

head -n <num> | tail -n <lines to print>

जहां num 1e6 + लाइनों की संख्या है जिन्हें आप मुद्रित करना चाहते हैं।


एक श्रेणी पते के साथ sed delete कमांड का प्रयोग करें। उदाहरण के लिए:

$ sed 1,100d file.txt # Print file.txt omitting lines 1-100.

वैकल्पिक रूप से, यदि आप केवल एक ज्ञात श्रेणी मुद्रित करना चाहते हैं तो प्रिंट कमांड को -n ध्वज के साथ उपयोग करें:

$ sed -n 201,300p file.txt # Print lines 201-300 from file.txt

जीएनयू उपयोगिताओं की उपस्थिति के बावजूद, इस समाधान को सभी यूनिक्स सिस्टम पर भरोसेमंद काम करना चाहिए।


एडब्ल्यूके के साथ एक कम वर्बोज़ संस्करण:

awk 'NR > 1e6' myfile.txt

लेकिन मैं पूर्णांक संख्याओं का उपयोग करने की सिफारिश करेंगे।


मुझे ऐसा करने की ज़रूरत थी और यह धागा मिला।

मैंने "पूंछ-एन + की कोशिश की, लेकिन यह सिर्फ सब कुछ मुद्रित किया।

अधिक + लाइनें प्रॉम्प्ट पर अच्छी तरह से काम करती थीं, लेकिन यह पता चला कि हेडलेस मोड (क्रोनबॉज) में दौड़ते समय यह पूरी तरह अलग होता है।

अंततः मैंने इसे खुद लिखा:

skip=5
FILE="/tmp/filetoprint"
tail -n$((`cat "${FILE}" | wc -l` - skip)) "${FILE}"

यदि आप पहली 10 लाइन देखना चाहते हैं तो आप नीचे के रूप में sed का उपयोग कर सकते हैं:

sed -n '1,10 p' myFile.txt

या यदि आप 20 से 30 तक लाइन देखना चाहते हैं तो आप इसका उपयोग कर सकते हैं:

sed -n '20,30 p' myFile.txt

यह खोल स्क्रिप्ट मेरे लिए ठीक काम करती है:

#!/bin/bash
awk -v initial_line=$1 -v end_line=$2 '{
    if (NR >= initial_line && NR <= end_line) 
    print $0
}' $3

इस नमूना फ़ाइल (file.txt) के साथ प्रयोग किया जाता है:

one
two
three
four
five
six

आदेश (यह फ़ाइल में दूसरी से चौथी पंक्ति से निकाला जाएगा):

[email protected]:~$./script.sh 2 4 file.txt

इस आदेश का आउटपुट:

two
three
four

बेशक, आप इसे सुधार सकते हैं, उदाहरण के लिए परीक्षण करके सभी तर्क मान अपेक्षित हैं :-)


सिर्फ एक sed विकल्प का प्रस्ताव देने के लिए। :) पहली दस लाख लाइनों को छोड़ने के लिए, कोशिश करें |sed '1,1000000d'

उदाहरण:

$ perl -wle 'print for (1..1_000_005)'|sed '1,1000000d'
1000001
1000002
1000003
1000004
1000005




skip