152 votes

Obtenir une ligne spécifique d'un fichier texte en utilisant uniquement un script shell

Je suis en train d'essayer d'obtenir une ligne spécifique à partir d'un fichier texte.

Jusqu'à présent, en ligne, je n'ai vu que des trucs comme sed, (je ne peux utiliser que le sh - pas le bash ni sed ni quoi que ce soit d'autre). J'ai besoin de le faire uniquement en utilisant un script shell de base.

cat file | while read line
    do
       #faire quelque chose
    done

Je sais comment itérer à travers les lignes, comme indiqué ci-dessus, mais que faire si je dois juste obtenir le contenu d'une ligne particulière

275voto

Kent Points 71470

Sed:

sed '5!d' file

awk:

awk 'NR==5' file

traduction :

sed '5!d' fichier

awk:

awk 'NR==5' fichier

37voto

micromoses Points 4820

Supposons que line est une variable qui contient le numéro de ligne requis, si vous pouvez utiliser head et tail, alors c'est assez simple :

head -n $line fichier | tail -1

Si ce n'est pas le cas, cela devrait fonctionner :

x=0
want=5
cat lines | while read line; do
  x=$(( x+1 ))
  if [ $x -eq "$want" ]; then
    echo $line
    break
  fi
done

35voto

habitullence Points 130

Vous pourriez utiliser sed -n 5p file.

Vous pouvez également obtenir une plage, par exemple, sed -n 5,10p file.

26voto

faithonour Points 41

Meilleure performance méthode

sed '5q;d' file

Parce que sed arrête de lire les lignes après la cinquième

Mise à jour de l'expérience de Mr. Roger Dueck

J'ai installé wcanadian-insane (6.6MB) et comparé sed -n 1p /usr/share/dict/words et sed '1q;d' /usr/share/dict/words en utilisant la commande time ; le premier a pris 0.043s, le second seulement 0.002s, donc utiliser 'q' est définitivement une amélioration de performance !

13voto

Mona Jalal Points 1207

Si par exemple vous voulez obtenir les lignes 10 à 20 d'un fichier, vous pouvez utiliser chacune de ces deux méthodes :

head -n 20 york.txt | tail -11

ou

sed -n '10,20p' york.txt 

p dans la commande ci-dessus signifie imprimer.

Voici ce que vous verrez : enter image description here

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X