Je suis paresseux et je pourrais écrire un script pour le faire, mais je suis même trop paresseux pour penser à comment le faire.
Je fais souvent des choses comme:
cris$ python runexperiment.py > output.txt
cris$ cat output.txt
Parfois, en regardant le long résultat d'une expérience, j'aime laisser la page défiler et regarder les modèles successifs se former et se disperser. Mais l'utilisation de cat sur un fichier avec 1 million de lignes se termine en peut-être 5 secondes. C'est trop rapide, même pour moi.
Existe-t-il un moyen de ralentir la vitesse d'affichage du fichier, quelque chose comme un «utilitaire de défilement»? Je veux rapide, mais pas 200k lignes par seconde (tout cela sans doute que l'écran ne s'enregistrerait même pas de toute façon).
Quelque chose comme
cris$ scroll -lps=300 output.txt
Et puis s'asseoir et regarder 300 lignes par seconde passer serait idéal, j'imagine.
cat FILENAME | pv -l -L 900 -q
. La limite est en octets par seconde, pas en lignes par seconde, donc j'en fais un commentaire et non une réponse.Réponses:
Court et lisible :
Je poste ces solutions car elles sont petites et lisibles, car les commentaires de la réponse de DMas semblent promouvoir ce type de solution!
Mais je déteste ça parce que: pour cette course, perl va bifurquer à
/bin/sleep
300x / secondes!C'est un gros consommateur de ressources! Aussi une mauvaise bonne solution !!
Utilisation du sommeil intégré en perl
Malheureusement, la fonction intégrée
sleep
est limitée aux nombres entiers. Nous devons donc utiliser à laselect
place:Sous perl,
print while <>
pourrait être remplacé par le-p
switch:Essayons:
Explication:
300 lignes / s signifie 1 ligne par 0,0033333333 s.
print
sans argument imprime$_
qui est l'espace d'entrée par défaut .appelé comme
... | perl -e
,... | perl -ne
ou... | perl -pe
, l'entrée standard serait automatiquement affectée à*STDIN
quel est le descripteur de fichier par défaut ,<>
ferait de même que celui<STDIN>
qui lira à partir de l'entrée standard jusqu'à ce que$/
( séparateur d'enregistrement d'entrée qui est par défaut une nouvelle ligne ) soit atteint. En anglais, par défaut<>
, lira une ligne de l'entrée standard et attribuera le contenu à la$_
variable.&&
est une condition et , mais y est utilisé comme séparateur de commande de chaîne, donc après (avec succès) imprimer une ligne, en exécutant la commande suivante.select
est une astuce de programmeur à ne pas utilisersleep
. Cette commande est conçue pour intercepter les événements sur les descripteurs de fichiers (entrées et / ou sorties, fichiers, socket et / ou net sockets). Avec cette commande, un programme peut attendre 3 types d'événements, un flux prêt à lire , un flux prêt à écrire et un événement s'est produit sur le flux . Le quatrième argument est un délai d'expiration en secondes, la syntaxe l'est doncselect <feeds where wait for input>, <feeds where having to write>, <feed where something could happen>, <timeout>
.Pour plus de précision, vous pouvez utiliser le
Time::Hires
module perl:Remarque:
$.
est le numéro de ligne d'entrée actuel .Mieux écrit comme
cat >catLps.pl
Usage:
Nous pourrions donc:
Pour s'amuser:
la source
Time::HiRes
module perl pour plus de précision-p
commande switch to perl, le script a été allégé!utilisez simplement awk avec sommeil:
la source
system(*sleep .1")
générera 10 fourchettes / secondes! Cela pourrait être écritperl -pe 'system "sleep .1"' log.txt
: lisible aussi, mais très cher (pas compatible avec le système!)Je suis en retard à la fête, mais j'ai trouvé que ce serait un exercice d'apprentissage utile pour essayer en python, donc je vais mettre en place ce que j'ai obtenu:
Il accepte les entrées de stdin ou comme argument (-i) et écrit par défaut une ligne par 1 / 10ème de seconde, mais cela peut être modifié avec un autre argument (-d).
la source