Ключ к производительности читает огромный файл только однажды.
Можно передать несколько шаблонов grep путем помещения их на отдельные строки. Это обычно делается, говоря grep читать шаблоны из файла:
grep -F -f 300KFile 30MFile
Это производит соответствия в порядке большого файла и печатает строки, которые соответствуют нескольким шаблонам только однажды. Кроме того, это ищет шаблоны где угодно в строке; например, если файл шаблона содержит 1234
, затем строки такой как 123456,345678,2348962342
и 478912,1211138,1234
будет соответствовать.
Можно ограничить точными совпадениями столбца путем предварительной обработки шаблона. Например, если шаблоны не содержат специального символа ()?*+\|[]{}
:
<300KFile sed -e 's/^/(^|,)/' -e 's/$/($|,)/' |
grep -E -f - 30MFile
Если сохранение только первого соответствия для каждого шаблона важно, сделайте первичную обработку для извлечения только соответствующих строк как выше, затем сделайте вторую передачу в awk или жемчуге, который отслеживает шаблоны, которые были уже замечены.
<300KFile sed -e 's/^/(^|,)/' -e 's/$/($|,)/' |
grep -E -f - 30MFile |
perl -l -F, -ape '
BEGIN {
open P, "300KFile" or die;
%patterns = map {chomp; $_=>1} <P>;
close P;
}
foreach $c (@F) {
if ($patterns{$c}) {
print;
delete $patterns{$c};
}
}
'
Если я понимаю правильно, Вам нужен mod_alias модуль апача. Если это так, в Вашей виртуальной конфигурации хоста Вы добавите:
Alias /scanned /home/new1/fs_path/scanned
<Directory /home/new1/fs_path/scanned>
Order allow,deny
Allow from all
</Directory>