shoorick: (Рыжий)
[personal profile] shoorick
Для подсчёта количества байт, символов, слов и строк в юникосоподобных операционных системах предназначена программа wc. Иногда хочется запускать её, например, раз в секунду, чтоб следить за выполнением какого-нибудь долгого процесса.

Сделал по-быстрому скрипт, который просто вызывает wc и выводит его результат, пока пользователю не надоест и он не нажмёт Ctrl+C
#!/usr/bin/perl

print STDERR "Press ^C to exit\n";
my $cmd_line = 'wc ' . join ' ', @ARGV;
my $out;
while (1) 
    $out = `$cmd_line`;
    chomp $out;
    print "\cM$out";
    sleep 1;

Запустить можно, например, так:
wcloop -l some-big-file.txt

http://shoorick.ru/2014/11/18/watch-for-filesize-in-infinite-loop/


upd/15:48: товарищ подсказывает:
watch -n 1 wc -l?
И верно ведь посдказывает!

Date: 2014-11-18 10:56 am (UTC)
From: [identity profile] aamonster.livejournal.com
На Маке watch нет, но однострочник
while true; do wc FILENAME | tr '\n' '\r'; sleep 1; done
вполне выполняет задачу - тестил на строке
while true; do ps -ax | wc | tr '\n' '\r'; sleep 1; done
Edited Date: 2014-11-18 10:57 am (UTC)

Ага

Date: 2014-11-18 12:18 pm (UTC)
From: [identity profile] shoorick.livejournal.com
Тоже хороший вариант :-)

Re: Ага

Date: 2014-11-18 02:14 pm (UTC)
ext_659893: Sapa (Default)
From: [identity profile] sappa.livejournal.com
Лучше напиши версию wc которая будет печатать число строк не по достижении конца файла, а постоянно.Но на каждую входную строку перевыводить на экран число тоже оверхед большой. Раз в секунду (при условии что число поменялось) было бы нормально. И тогда этой утилите можно было подать на вход вывод из tail -n +1 -f filename и смотреть рост в динамике не пересканируя большой файл каждую секунду.

Profile

shoorick: (Default)
shoorick

December 2016

S M T W T F S
    1 23
45678910
11121314151617
18 19 2021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 21st, 2026 01:29 am
Powered by Dreamwidth Studios