LINUX.ORG.RU

Можно конечно брать каждую строку из файла 1 и грепать в файле 2, но может быть есть более правильный путь?

З.Ы. строк > 10 тыс

xorik ★★★★★
() автор топика

{ cat file1 | sort -u; cat file2; } | sort | uniq -c | awk '$1 == 1 { print $2 }'

dilmah ★★★★★
()

fgrep -v -x -f file2 file1 (кушает прилично памяти)

sf ★★★
()
Ответ на: комментарий от sdio

> > man join

> как?

ну, у join то есть опции, чтобы печатать unpairable строки. Хотя я бы делал с помощью sort+awk.

dilmah ★★★★★
()

[такого ещё не предлагали]

загнать в rdbms :) SELECT str FROM table2 WHERE str NOT IN (SELECT str FROM table1);

Вполне sqlite справится :)

true_admin ★★★★★
()

никто не знает про comm? Ну вы блин...

$ PAGER=cat man comm | head -25
COMM(1)                          User Commands                         COMM(1)



NAME
       comm - compare two sorted files line by line

SYNOPSIS
       comm [OPTION]... FILE1 FILE2

DESCRIPTION
       Compare sorted files FILE1 and FILE2 line by line.

       With  no  options,  produce  three-column  output.  Column one contains
       lines unique to FILE1, column two contains lines unique to  FILE2,  and
       column three contains lines common to both files.

       -1     suppress lines unique to FILE1

       -2     suppress lines unique to FILE2

       -3     suppress lines that appear in both files

       --help display this help and exit

$ dpkg -S `which comm`
coreutils: /usr/bin/comm

Нужная тебе команда:

$ comm -2 -3 файл1 файл2

Не забывай, что comm работает корректно только с отсортированными файлами.

gorilych ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.