дедупликация строк в большом файле

Когда Вы не передаете имени файла ack, он воздействует на встроенный набор по умолчанию файлов, который исключает нераспознанные двоичные файлы. При передаче имен файлов это ищет во всех файлах, которые Вы передаете. Это объясняет различие между ack foo и ack foo **.

ack 1

В ack 1.x, используйте флаг -a сказать ack не пропускать файлы, тип которых это не распознает.

Можно сделать псевдоним, если Вы хотите тот флаг, как правило: добавьте строку alias ack='ack -a' в Вашем ~/.bashrc или ~/.zshrc. Если Вы настраиваете этот псевдоним и хотите звонить ack без опции звонить \ack (обратная косая черта отключает расширение псевдонима). Сценарии не затронуты псевдонимом, только интерактивные оболочки.

С другой стороны, можно добавить -a опция к Вашему ~/.ackrc.

Соответствия в двоичных файлах будут перечислены как “Соответствия двоичного файла test1”. Нет никакого способа отключить это поведение, не изменяя сам Ack (по крайней мере, добавляющий плагин).

ack 2

В ack 2.0, -a опция была удалена. Что можно сделать, вместо этого должен определить тип, который соответствует всем файлам, и используйте -k опция заставить ack включать все файлы того типа. Обратите внимание, что типы файлов обрабатываются в непредсказуемом порядке, к этому заставит случайный набор двоичных типов быть обработанным столь же обычный вместо как обычный тип.

ack --type-set='all:match:.*' -k foo

Таким образом, соответствия печатаются даже для файлов, которые иначе выглядели бы двоичными. Как выше, можно добавить эти опции к псевдониму или к Вашему .ackrc.

4
13.04.2017, 15:36
3 ответа
% perl -ne 'if ( $seen{$_}++ ) {
    $count++ ;
    if ($count > 1000000) {
        $seen = () ;
        $count = 0 ;
    }
} else {
    print ;
}' <eof   
a
a
a
b
c
a
a
a
b
c
eof   
a
b
c
%
0
27.01.2020, 21:00

Мне кажется, что этот процесс, который вы следуете следующему в данный момент, так это, что выходит из-за ошибки памяти:

  1. Создать несколько файлов данных
  2. ConcateNate их вместе
  3. Сортировка результата, отбрасывая Дубликаты записей (строки)

Я думаю, что вы должны иметь возможность выполнять следующий процесс

  1. Создать несколько файлов данных
  2. Сортировать каждый независимо, отбросив его дубликаты ( сортировка --U )
  3. ​​Объединение полученного набора файлов отсортированных данных, отбрасывая дубликаты ( Sort -m -u )
2
27.01.2020, 21:00

Можно использовать команду locate и при необходимости обновления базы данных выполните следующую команду:

# updatedb

Эта команда обновляет базу данных locate за несколько секунд

-121--9056-

Я думаю, что это должно сработать, он передает путь/имя каждого файла по отдельности в gunzip для обработки:

find /my/dir -name "*.pdb.gz" -execdir gunzip "{}" \;
-121--31527-

Конечно, нет инструментов GNU/Linux: то, что является частью системы управления исходным кодом (SCCS), чего я не делаю

Так, предположительно, вы находитесь в Unix. Там алгоритм sort способен справиться с этими проблемами: в Алгоритмических подробностях команды UNIX Sort указано, что вход размером M , с памятью размером N , подразделяется на M/N порций, которые вписываются в память, и над которыми последовательно работают

Он должен соответствовать счету.

0
27.01.2020, 21:00

Теги

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