Я ленивый, и я мог бы написать сценарий для этого, но я даже слишком ленив, чтобы думать о том, как это сделать.
Я часто делаю такие вещи, как:
cris$ python runexperiment.py > output.txt
cris$ cat output.txt
Иногда, когда я смотрю на длинный результат эксперимента, мне нравится позволять странице просто прокручивать и наблюдать, как формируются и рассеиваются последовательные шаблоны. Но использование cat для файла с 1 миллионом строк заканчивается за 5 секунд. Это слишком быстро даже для меня.
Есть ли способ, которым я могу замедлить скорость просмотра файла, что-то вроде «утилиты прокрутки»? Я хочу быстро, но не 200 тыс. Строк в секунду (все из которых, по-видимому, дисплей никогда не будет регистрироваться в любом случае).
Что-то вроде
cris$ scroll -lps=300 output.txt
И тогда я думаю, что сидеть сложа руки и смотреть, как проходит 300 строк в секунду, было бы идеально.
cat FILENAME | pv -l -L 900 -q
. Ограничение в байтах в секунду, а не строк в секунду, поэтому я делаю этот комментарий, а не ответ.Ответы:
Коротко и читабельно :
Я публикую эти решения, потому что они маленькие и удобочитаемые, так как комментарии к ответу DMas, кажется, способствуют решению такого рода!
Но я ненавижу это, потому что: для этого запуска perl разветвляется до
/bin/sleep
300x / секунд!Это большой потребитель ресурсов! Также неправильно хорошие решения !
Использование встроенного сна в Perl
К сожалению, встроенная функция
sleep
ограничена целыми числами. Поэтому мы должны использоватьselect
вместо этого:Под perl
print while <>
может быть заменен-p
переключатель:Давай попробуем:
Объяснение:
300 строк / сек означает 1 строку на 0,0033333333 сек.
print
без аргумента печатает,$_
что является полем ввода по умолчанию .называется
... | perl -e
,... | perl -ne
или... | perl -pe
, стандартный ввод будет автоматически присвоен ,*STDIN
который дескриптор файла по умолчанию , так что<>
будет делать то же самое,<STDIN>
который будет считывать данные со стандартного ввода до тех пор$/
( входной разделитель записей , который по умолчанию используется символ новой строки ) будет достигнута. На английском языке по умолчанию<>
будет читать одну строку из стандартного ввода и назначать содержимое$_
переменной.&&
это и состояние, но используется там в качестве командной цепи сепаратора так после (успешно) напечатать одну строку, делая следующую команду.select
является трюк программиста не использоватьsleep
. Эта команда предназначена для захвата событий в файловых дескрипторах (входные и / или выходные данные, файлы, сокеты и / или сетевые сокеты). С помощью этой команды программа может ожидать 3 вида событий, канал готов к чтению , канал готов к записи, и какое-то событие происходит в канале . Четвертый аргумент - это время ожидания в секундах, поэтому синтаксис таковselect <feeds where wait for input>, <feeds where having to write>, <feed where something could happen>, <timeout>
.Для большей точности вы можете использовать
Time::Hires
модуль perl:Примечание:
$.
это номер текущей строки ввода .Лучше написано как
cat >catLps.pl
Использование:
Итак, мы могли бы:
Ради забавы:
источник
Time::HiRes
модуля Perl для большей точности-p
switch to perl скрипт был облегчен!просто используйте awk со сном:
источник
system(*sleep .1")
будет генерировать 10 форкс / сек! Это можно было бы написатьperl -pe 'system "sleep .1"' log.txt
: тоже читабельно, но очень дорого (не дружественно к системе!)Я опаздываю на вечеринку, но я обнаружил, что это было бы полезным упражнением в обучении на python, поэтому я поделюсь тем, что получил
Он принимает ввод от stdin или в качестве аргумента (-i) и по умолчанию записывает одну строку в 1/10 секунды, но это можно изменить с помощью другого аргумента (-d).
источник