Есть ли быстрый способ поиска образец или увеличить скорость цикла while?

Есть ли быстрый способ поиска образец или увеличить скорость цикла while?

26.04.2017 08:11:33 Просмотров 26 Источник

этот цикл занимает много времени из-за отсутствия записи в main_file .

while read line;do  
         cat main_file | grep "$line";
done<file

cat file

pattern_1
pattern_2

cat main_file
  main  pattern_1
  main  pattern_2
  main pattern_2
У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/43625529/is-there-any-faster-way-to-grep-the-pattern-or-to-increase-the-speed-of-while-lo#comment74299717_43625529
Команда командной строки grep не требует, чтобы вы читали каждую строку. Это сделано, чтобы прочитать каждую строку уже. Поэтому просто используйте саму команду GREP и пусть она извергает строки, где находится то, что вы ищете. Проверьте файл справки о GREP. Там есть все это.
https://stackoverflow.com/questions/43625529/is-there-any-faster-way-to-grep-the-pattern-or-to-increase-the-speed-of-while-lo#comment74299768_43625529
помогите мне с более быстрой командой, если это возможно.
https://stackoverflow.com/questions/43625529/is-there-any-faster-way-to-grep-the-pattern-or-to-increase-the-speed-of-while-lo#comment74299900_43625529
Вы должны сначала попробовать, а потом мы вам поможем. Вы можете прочитать обо всех вариантах GREP онлайн, просто погуглив его. У тебя нет причин так легко сдаваться.
https://stackoverflow.com/questions/43625529/is-there-any-faster-way-to-grep-the-pattern-or-to-increase-the-speed-of-while-lo#comment74300108_43625529
"grep-f file main_file" у меня есть эта команда, но это также медленнее
https://stackoverflow.com/questions/43625529/is-there-any-faster-way-to-grep-the-pattern-or-to-increase-the-speed-of-while-lo#comment74300200_43625529
Да, я вижу, кто-то дал тебе это внизу. Вот и все, что ты читаешь на страницах журнала GREP. Как насчет этого - если бы вы сделали это на PHP, это было бы намного быстрее. У GREP есть много вариантов. Он построен, чтобы работать и работать правильно каждый раз, но он не был построен для скорости. PHP выполняет только то, что вы ему говорите. Кроме того, он оптимизирован для обработки больших объемов данных. Так что это намного быстрее, чем GREP (который был создан примерно в 1950-х годах.)
https://stackoverflow.com/questions/43625529/is-there-any-faster-way-to-grep-the-pattern-or-to-increase-the-speed-of-while-lo#comment74300202_43625529
Давайте узнаем, насколько велики ваши файлы.
https://stackoverflow.com/questions/43625529/is-there-any-faster-way-to-grep-the-pattern-or-to-increase-the-speed-of-while-lo#comment74300630_43625529
main_file содержит 5 милионных строк, и я не могу предсказать паттерен также, в каком столбце он присутствует. @ codeforester

Ответы - Есть ли быстрый способ поиска образец или увеличить скорость цикла while? / Is there any faster way to grep the pattern or to increase the speed of while loop?

Является ответом!
codeforester

26.04.2017 08:27:10

Ваш текущий подход очень неэффективен - весь цикл может быть выполнен в одном grep, с опцией-f.

grep -Fxf file main_file
  • -Fрассматривает строки в fileкак строки, а не Шаблоны
  • -xищет точную совпадающую линию (если это то, что вы хотите)
  • -f fileсчитывает строки из fileи ищет их в main_file

Вышеописанный подход будет работать хорошо, пока файлы малы. Для больших файлов используйте awk:

awk 'FNR==NR {hash[$1]; next} $2 in hash' file main_file

Для деталей, посмотрите на этот пост - у него были и другие решения:

https://stackoverflow.com/questions/43625529/is-there-any-faster-way-to-grep-the-pattern-or-to-increase-the-speed-of-while-lo/43625722#comment74300838_43625722
здесь $2 означает второй столбец main_file справа.проблема в том, что мы не знаем, в каком столбце присутствует шаблон в main_file.@codeforester
https://stackoverflow.com/questions/43625529/is-there-any-faster-way-to-grep-the-pattern-or-to-increase-the-speed-of-while-lo/43625722#comment74304904_43625722
В этом случае отбросьте опцию-x из grep. И решение awk не будет работать для вас, если у вас нет фиксированной колонки для применения соответствия.
Закрыть X