счетчик уникальных строк в реальном времени

TL;DR:

Поместите комментарии в отдельные строки конфигурации.

Комментарий в конце строки заставляет readlineмолча игнорировать всю строку , если в противном случае строка была бы допустимой.


В руководстве действительно сказано:

Lines beginning with a ‘#’ are comments.

Здесь не говорится, что комментарий приведет к игнорированию допустимой строки конфигурации.

Это странно, потому что строка:

set foobar on  # baz

Результаты в:

readline: /home/ravi/.config/readline/inputrc: line 34: foobar: unknown variable name

Это означает, что строки с #в конце действительно анализируются на достоверность. Они просто игнорируются, если в противном случае они были бы действительными.

0
12.05.2020, 07:50
3 ответа

Вы можете использовать awk:

... | awk '{seen[$0]++} !(NR % 10) {print "======"; for (i in seen) print seen[i], i}'

Это будет вести подсчет дубликатов(seen[$0]++)и печатать их через каждые десять входных строк(!(NR % 10)). Например:

% % while sleep 1; do echo $((RANDOM % 10)); done | awk '{seen[$0]++} !(NR % 10) {print "======"; for (i in seen) print seen[i], i}'
======
1 0
1 1
3 3
1 6
2 7
2 9
======
3 0
3 1
1 2
3 3
1 4
2 5
2 6
3 7
2 9
======
3 0
3 1
2 2
3 3
2 4
5 5
4 6
3 7
2 8
3 9
...
2
28.04.2021, 23:14

watch -n <seconds> "sort <file> | uniq -c"

Должно быть о том, что вы хотите. Выполняет sort | uniqкаждые <seconds>.

0
28.04.2021, 23:14

Можно сделать с помощью короткого perlскрипта, такого как:

#! /usr/bin/perl
system qw(tput sc); # save cursor
$rc = `tput rc; tput ed`; # restore cursor and erase down
sub report {
  print $rc;
  print "$_: $c{$_}\n" for sort {
    ($c{$b} <=> $c{$a}) || ($a cmp $b)
  } keys %c;
  STDOUT->flush;
  alarm 1;
}
$SIG{ALRM} = \&report;
alarm 1;
while (<>) {
  chomp;
  $c{$_}++;
}
report;
2
28.04.2021, 23:14

Теги

Похожие вопросы