2016-03-07 2 views
0

N00b вопрос: У меня есть два файла, оба имеют только строки с нижней буквой и сортируются по алфавиту. «file_A» имеет более 11.000.000 строк из 6-7 символов, а «file_B» имеет около 400 000 строк, имеющих 3-4 символа.Удаление суб-строк из файла путем их скрещивания с другим файлом

Я хотел бы удалить все строки из «file_A», если они могут быть частично найдены против строк из «file_B» (например: удалить строку «bobcat» или «catwoman» из «file_A», если проверено на строку «cat» "из" file_B "). Прямо сейчас, я могу сделать это с помощью простого скрипта:

while read -r line; do 
    sed -i "/"$line"/d" $file_A 
done < $file_B 

Проблема заключается в том, что этот процесс является путь путь слишком медленно (или, что то, как я воспринимаю его). Похоже, что требуется некоторое время, пока временная память не сохранит файл_А в той же папке и не проверит ее снова, я предполагаю - против следующей строки из файла_B. Через 6 часов я отменил его. Можно ли ускорить этот процесс?

Я искал форум для ответа на костюм. Если этот вопрос уже задан, перенаправите меня на ответ.

спасибо.

ответ

0

Использование grep:

grep -vFf a.txt b.txt > b.modified.txt 
mv b.modified.txt > b.txt 
  • -v матчи только линии, которая делает матч один из шаблонов. Это эффективно удаляет строки, которые действительно соответствуют одному из шаблонов

  • -F использует фиксированные строки вместо регулярных выражений

  • -f a.txt модели чтения из a.txt