grep -f альтернативный sed?awk?

#sed #awk #grep

#sed #awk #grep

Вопрос:

 file1 = 95000
file2 = 4500000
  

Я хочу отфильтровать записи file1 из file2.

 egrep -f file1 file2
  

для завершения требуется время.
Есть ли альтернатива? sed? awk?

Спасибо

Ответ №1:

конечно, вы можете использовать awk . Помещает file2 записи в массив. Затем выполните итерацию file1 , каждый раз находя эти записи в массиве.

 awk 'FNR==NR{a[$0];next}($0 in a)' file2 file1
  

Поиграйте с этими параметрами, чтобы получить то, что вы хотите

 awk 'FNR==NR{a[$0];next}(!($0 in a))' file2 file1
awk 'FNR==NR{a[$0];next}(!($0 in a))' file1 file2
awk 'FNR==NR{a[$0];next}($0 in a)' file1 file2
  

Комментарии:

1. Будет ли это отфильтровывать file1 из file2? Как egrep -vf file1 file2 ?

Ответ №2:

Я не думаю, grep -f что он действительно предназначен для работы с файлом фильтра такого размера, поэтому лучшим выбором может быть какое-то решение с поддержкой базы данных.

Вы могли бы загрузить оба файла построчно в базу данных SQLite, а затем выполнить простую часть SQL примерно так:

 SELECT line FROM file2
EXCEPT
SELECT line FROM file1
  

и выгрузите их обратно. Вы могли бы сделать все это прямо из командной строки с помощью SQLite.