J'ai un fichier qui contient 100000 lignes comment obtenir les lignes de la ligne # 5555 à la ligne # 7777 sous Linux.
Merci pour tout.
J'ai un fichier qui contient 100000 lignes comment obtenir les lignes de la ligne # 5555 à la ligne # 7777 sous Linux.
Merci pour tout.
Réponses:
sed '5555,7777!d' <filename>
Cela imprimera les lignes 5555-7777 du fichier inclusivement.
Dennis a posté ce qui suit, je pense qu'il devrait être plus rapide:
sed '5555,7777p; 7778q' filename
La preuve suivante qu'il devrait être plus rapide:
$ 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
Dans Bash uniquement (pour le plaisir):
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 devrait être? En outre, vous pouvez le faire if (( n >= 5555 ))
pour des opérateurs de comparaison numériques plus «naturels» (et la possibilité de laisser de côté le signe dollar). Et vous pouvez le faire ((n++))
.
Arrêter de fumer lorsque vous avez terminé peut accélérer les choses:
sed -n '5555,7777p; 7778q' input_file
J'ai trouvé que l'option sed ne fonctionnait pas sur un fichier mysqldump, je suppose en raison de la gestion des sauts de ligne entre guillemets ou des caractères multi-octets. la tête et la queue le coupent en utilisant les mêmes numéros de ligne que grep, ce dont j'avais besoin. Pour obtenir les lignes $ j à $ k, vous avez besoin de:
x=$(( $k - $j + 1 ))
tail -n +$j filename | head -${x}