У меня огромное количество файлов, около 200 000 записей в файле. Я тестировал некоторые случаи, когда мне нужно выяснить, что шаблон именования файлов соответствует некоторым конкретным строкам. Вот как я предшествовал:Вложенная петля слишком медленная: обход записи 1MN
Тестовые строки, хранящиеся в файле (скажем, для одного случая, они равны 10). Фактический файл, содержащий строковые записи, разделенные символом новой строки; на общую сумму до 200 000 записей. Чтобы проверить, существуют ли шаблоны тестовых строк в большом файле, я написал небольшой вложенный цикл.
for i in `cat TestString.txt`
do
for j in `cat LargeFile.txt`
do
if [[ $i == $j ]]
then
echo "Match" >> result.txt
fi
done
done
Эта вложенная петля фактического должен делать обход (если я не ошибаюсь в понятиях), 10x200000 раз. Обычно я не вижу, что на сервере слишком много нагрузки, но время, как все время. Отрывок работает в течение последних 4 часов, с определенными «согласованными» результатами.
Есть ли у кого-нибудь идеи по ускорению этого? Я нашел так много ответов с python или perl touch, но я честно искал что-то в Unix.
Благодаря
Ваш текущий код считывает одно слово за цикл. Когда 10 записей в TestString.txt содержат по 20 слов, вы будете проходить через файл LargeFile.txt 10x20x200.000 раз. Как часто вы проверяете? Когда файл LargeFile.txt также содержит 20 слов для каждой записи, вы имеете сравнение 10x20x200.000x20. –
Вы должны перемещать '>> result.txt' за пределы циклов, поэтому вы не закрываете и не открываете файл для каждого цикла. –