Установка Ubuntu: много ошибок

Если вы хотите захватывать фреймы в маршрутизаторе, я бы посоветовал вам использовать tcpdump независимо от того, беспроводное ли это соединение или проводное, вы сможете захватить это. man tcpdump Это хорошее начало для вас, чтобы узнать о tcpdump.

3
10.07.2018, 21:06
1 ответ

Насколько велик ваш hitfileразмер? Не могли бы вы показать несколько реальных примеров того, что вы пытаетесь сделать? Поскольку вы не предоставили более подробной информации о ваших входных данных, это всего лишь одна идея опробовать и сравнить с вашими реальными данными .

Регулярные выражения Perl могут стать довольно большими, и одно регулярное выражение позволит вам изменить входной файл за один проход. Здесь я использую /usr/share/dict/wordsв качестве примера для создания огромного регулярного выражения, мое содержит ~99 тысяч строк и имеет размер ~1 МБ.

use warnings;
use strict;
use open qw/:std :encoding(UTF-8)/;

my ($big_regex) = do {
    open my $wfh, '<', '/usr/share/dict/words' or die $!;
    chomp( my @words = <$wfh> );
    map { qr/\b(?:$_)\b/ } join '|', map {quotemeta}
        sort { length $b <=> length $a or $a cmp $b } @words };

while (<>) {
    s/$big_regex//g;
    print;
}

I don't need regex, I only need to compare pure/exact strings against a hash (for speed). i.e. "pine" should not match "pineapple", but it should match "(pine)".

Если «сосна» не должна совпадать с «ананасом», вам также необходимо проверить символы до и после появления «сосны» во входных данных. Хотя, конечно, это возможно с фиксированными строковыми методами, похоже, что концепция регулярных выражений границ слов(\b)— это то, что вам нужно.

Is there an elegant, high-performance one-liner way... for my workflow I'd prefer a simple command to my script.

Не уверен, что согласен с этим мнением. Что не так с perl script.pl? Вы можете использовать его с перенаправлениями/конвейерами оболочки точно так же, как один лайнер -. Включение кода в сценарий избавит вашу командную строку от беспорядка и позволит вам выполнять сложные действия, не пытаясь втиснуть все это в одну -строку. Кроме того, короткое не обязательно означает быстрое.

Еще одна причина, по которой вы можете захотеть использовать сценарий, — это наличие нескольких входных файлов. С кодом, который я показал выше, создание регулярного выражения довольно затратно, поэтому многократный вызов скрипта будет дорогостоящим -обработка нескольких файлов в одном скрипте устранит эти накладные расходы. Мне нравится принцип UNIX, но для больших данных вызов нескольких процессов (иногда многократно )и передача данных между ними — не всегда самый эффективный метод, и оптимизация всего этого в одной программе может помочь.


Обновление:Судя по комментариям, достаточно веревки, чтобы выстрелить себе в ногу Код, который делает то же самое, что и выше, в одном -вкладыше:

perl -CDS -ple 'BEGIN{local$/;($r)=map{qr/\b(?:$_)\b/}join"|",map{quotemeta}sort{length$b<=>length$a}split/\n/,<>}s/$r//g' /usr/share/dict/words input.txt
2
27.01.2020, 21:25

Теги

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