Ich habe eine Datei, die 100000 Zeilen enthält, wie ich die Zeilen von Zeile # 5555 bis Zeile # 7777 unter Linux bekommen kann.
Danke für alles.
Ich habe eine Datei, die 100000 Zeilen enthält, wie ich die Zeilen von Zeile # 5555 bis Zeile # 7777 unter Linux bekommen kann.
Danke für alles.
Antworten:
sed '5555,7777!d' <filename>
Dadurch werden die Zeilen 5555-7777 der Datei einschließlich gedruckt.
Dennis hat folgendes gepostet, was meiner Meinung nach schneller sein sollte:
sed '5555,7777p; 7778q' filename
Der folgende Beweis, dass es schneller sein sollte:
$ 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
Nur in Bash (zum Spaß):
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
solltest vielleicht 7777 sein? Sie können auch if (( n >= 5555 ))
mehr "natürlich" aussehende Vergleichsoperatoren verwenden (und die Möglichkeit, das Dollarzeichen wegzulassen). Und du kannst es tun ((n++))
.
Wenn Sie fertig sind, können Sie Folgendes beschleunigen:
sed -n '5555,7777p; 7778q' input_file
Ich habe festgestellt, dass die sed-Option bei einer mysqldump-Datei nicht funktioniert, da Zeilenumbrüche oder Multibyte-Zeichen in Anführungszeichen gesetzt werden. Kopf und Schwanz schneiden es mit den gleichen Zeilennummern wie grep, was ich brauchte. Um die Zeilen $ j bis $ k zu erhalten, benötigen Sie:
x=$(( $k - $j + 1 ))
tail -n +$j filename | head -${x}