grep -f альтернатива sed? awk? - PullRequest
       3

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

1 голос
/ 28 апреля 2011
file1 = 95000
file2 = 4500000

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

egrep -f file1 file2

требуется много времени для завершения.Есть ли альтернатива?СЭД?awk?

Спасибо

Ответы [ 2 ]

2 голосов
/ 28 апреля 2011

Конечно, вы можете использовать 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
0 голосов
/ 28 апреля 2011

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

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

SELECT line FROM file2
EXCEPT
SELECT line FROM file1

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

...