сценарий оболочки для чтения из нескольких файлов параллельно

Мне нужно написать скрипт, который выполняется параллельно и ищет строку в нескольких файлах.
Я попробовал много вариантов, но они замедляют скорость моего процессора.

3 Solutions collect form web for “сценарий оболочки для чтения из нескольких файлов параллельно”

Если файлы находятся на отдельных дисках, запустите одну команду grep на каждом диске.

Для файлов на одном диске узкое место читается с диска. Чтение из нескольких файлов параллельно приведет только к ухудшению скорости.

Если файлы находятся в массиве RAID-0, вы можете увеличить скорость, одновременно запустив две команды grep . Тест, чтобы узнать, действительно ли вы набираете время. Низкотехнологичный способ:

 grep file1 file2 file3 & grep file4 file5 file6 

С параллельным GNU :

 parallel -j 2 grep ::: file1 file2 file3 file4 file5 file6 

Если вы получаете файлы от find :

 find … -print0 | parallel -0 -j 2 

Помните: если файлы находятся на одном диске, одна команда grep является самой быстрой.

Я предполагаю, что ваши файлы довольно большие (в противном случае вам, вероятно, не хотелось бы распараллеливать работу).

parallel предложения GNU хороши (и в xargs GNU также есть опция -P для параллельного выполнения). Но если grepping файла (или файлов) является операцией с привязкой к I / O, а не с привязкой к CPU, вы можете обнаружить, что запуск нескольких greps параллельно замедляет работу, потому что теперь у вас есть несколько процессов, конкурирующих за доступ к диску.

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

Если файлы не физически близки друг к другу на диске, это может быть МНОГИЕ раза медленнее, так как головки дисков должны перемещаться намного больше (конечно, это не будет проблемой на SSD или ramdisk, или если файлы уже кэшированы)

Вы можете попробовать GNU параллельно:

 find . -type f | parallel -k -j150% -n 1000 -m grep -H -n STRING {} 

http://www.gnu.org/software/parallel/man.html#example__parallel_grep )

Изменить: обратите внимание, что другие комментарии, указывающие, что grep будет работать быстрее последовательно, если узкое место является IO, верны.

  • Вам нужно сравнить два файла и распечатать все столбцы, а затем отобразить как NA, а затем присоединиться к другому файлу
  • Использование while loop для ssh для нескольких серверов
  • Скопировать файл из одной ZIP в другую?
  • выполнить команду на хосте из файла с пользователем из другого файла
  • выход из сценария
  • cut / grep и df -h
  • chown все файлы на основе шаблона имени файла в текущем каталоге
  • Команда чтения: как проверить, что пользователь набрал что-то
  • Сценарий оболочки Bash содержит основной вопрос относительно синтаксиса и basename
  • Какой тип файла / dev / core или / proc / kcore?
  • Написание сценария bash в новом окне, Escaping Code
  • Interesting Posts

    Есть ли программное обеспечение для программирования игровых мышек Logitech для любого Linux Distro?

    Добавление сетевой карты в файл modprobe

    Команда уровня wpa_cli всегда терпит неудачу

    Инструмент для создания текстовых файлов из шаблона

    Можно ли удалить каталог в постоянное время?

    ffmpeg -pattern_type glob – не загружать файлы в правильном порядке

    Настройка браузера Chromium для загрузки нескольких плагинов из файла / etc / chromium-browser / default

    Приложения с зависимостями Gtk2 в среде KDE

    Как я могу ограничить пользовательское приложение для работы в определенном пространстве имен в сети?

    сортировать файлы размером более 1000 байт в порядке убывания

    Замените одно поле другим, если его запись начинается с определенной буквы

    Список имен файлов, содержащих строку, которая встречается между двумя другими строками

    Как вы делаете Amarok пропускать видеофайлы при сканировании своей библиотеки?

    file-roller больше не использует один клик?

    Что означают поля в / proc / net / ipt_hashlimit / FILE?

    Linux и Unix - лучшая ОС в мире.