मेरे पास i फाइल है जिसमें 100000 लाइन है जिसमें मैं लाइन # 5555 से लाइन # 7777 लाइन लाइन के तहत कैसे प्राप्त कर सकता हूं।
सबको धन्यवाद।
मेरे पास i फाइल है जिसमें 100000 लाइन है जिसमें मैं लाइन # 5555 से लाइन # 7777 लाइन लाइन के तहत कैसे प्राप्त कर सकता हूं।
सबको धन्यवाद।
जवाबों:
sed '5555,7777!d' <filename>
यह फ़ाइल की 5555-7777 लाइनों को सम्मिलित रूप से प्रिंट करेगा।
डेनिस ने पोस्ट किया जो मैं सहमत हूं कि तेज होना चाहिए:
sed '5555,7777p; 7778q' filename
निम्नलिखित सबूत है कि यह तेज होना चाहिए:
$ n=1
$ while [[ n -le 100000 ]]; do echo $n >> sedtest2; n=$((n + 1)); done
$ strace -e trace=read -o sed1 sed '5555,7777!d' sedtest2
$ strace -e trace=read -o sed2 sed '5555,7777p; 7778q' sedtest2
$ wc -l sed1
149 sed1
$ wc -l sed2
14 sed1
केवल बैश में (मनोरंजन के लिए):
n=1
while read line; do
if [[ ($n -ge 5555) && ($n -le 7777) ]]; then
echo $line
elif [[ $n -gt 7777 ]]; then
break
fi
n=$(( $n + 1 ))
done < file
$n -gt 3
7777 शायद होना चाहिए? इसके अलावा, आप if (( n >= 5555 ))
अधिक "प्राकृतिक" दिखने वाले संख्यात्मक तुलना ऑपरेटरों (और डॉलर चिह्न को छोड़ने की क्षमता) के लिए कर सकते हैं। और आप कर सकते हैं ((n++))
।
जब आप कर रहे हों तब छोड़ना चीजों को गति प्रदान कर सकता है:
sed -n '5555,7777p; 7778q' input_file
मैंने पाया कि sed विकल्प mysqldump फ़ाइल पर काम नहीं करता था, मैं उद्धृत लाइन फीड्स या मल्टीबाइट वर्णों को संभालने के कारण अनुमान लगा रहा हूं। सिर और पूंछ इसे उसी पंक्ति संख्या के रूप में उपयोग करते हुए स्लाइस करते हैं जो मुझे चाहिए था। $ K के माध्यम से लाइनें $ j प्राप्त करने के लिए, आपको आवश्यकता है:
x=$(( $k - $j + 1 ))
tail -n +$j filename | head -${x}