/ / Retourne les plages de lignes d'un fichier texte PHP ou LINUX - php, linux, fichier

Renvoie les plages de lignes d'un fichier texte PHP ou LINUX - php, linux, fichier

J'ai un petit problème ici, j'ai besoin de pouvoirlire un fichier de taille inconnue, il peut s'agir de quelques centaines de lignes ou de plusieurs autres. Les fichiers journaux changent tout le temps et en fonction du moment où je vérifie. Je voudrais avoir une méthode qui est en PHP ou en Linux que je peux lire une plage de lignes à partir d'un fichier. Je ne veux pas avoir à lire l'intégralité du fichier dans la mémoire php, puis supprimer les lignes, car le fichier peut être plus volumineux que la mémoire autorisée de php.

Je veux aussi qu'il utilise des modules php par défaut ou que les outils linux par défaut ne veuillent pas avoir besoin d'installer quoi que ce soit car ils doivent être portables.

Modifier:

Pour les options basées sur Linux, j'aimerais êtrecapable de fournir plus d'une gamme, il se peut que je doive obtenir quelques gammes de lignes différentes, je sais comment le faire en php, mais pas sous linux et pour éviter de lire les lignes précédentes que j'ai déjà lues?

Réponses:

4 pour la réponse № 1

Avec awk:

awk "NR>=10 && NR<=15" FILE

Avec awk (deux gammes):

awk "NR>=10 && NR<=15 || NR>=26 && NR<=28" FILE

Avec ed:

echo 2,5p | ed -s FILE

Avec ed et deux gammes:

echo -e "2,5pn7,8p" | ed -s FILE

Last but not least, un sed solution à deux gammes (solution la plus rapide, testée avec time):

sed -n "2,5p;7,8p" FILE

1 pour la réponse № 2

Qu'en est-il quelque chose comme

head -100 | tail -15

vous donne les lignes 86-100


0 pour la réponse № 3
$ cat input.txt
q
w
e
r
t
y
u
i
$ sed -n 2,5p input.txt
w
e
r
t

0 pour la réponse № 4
while ($lines_read < last_line_desired) {
while ($line = fgets($filehandle, $buffersize) !== false)
if (line >= first_desired_line) {
push($interesting_lines, $line)
}
}
$lines_read++
}

Ouvrir le descripteur de fichier, en choisissant la taille de mémoire tampon suffisamment grande pour couvrir toute longueur de ligne attendue, etc., vous appartient.

Si vous lisez des fichiers qui sont régulièrement ajoutés, vous devriez vous pencher sur la marcher et fseek fonctions pour noter où vous vous trouvez dans vos données et ignorer tous les anciens éléments avant de continuer à lire.