Как получить контент из одного файла, который содержится в другом файле - PullRequest
0 голосов
/ 31 мая 2011

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

Пример, у меня есть

// first
foo
bar
// second
foo;1;3;p1
bar;1;3;p2
foobar;1;3;p2

Эти файлы большие, первый файл содержит ~ 500 000 записей, а второй ~ 20-15 миллионов

Мне нужно получить этот результат

// attention there is no "p1" or "p2" for example
foo;1;3
bar;1;3

Ответы [ 2 ]

2 голосов
/ 31 мая 2011

Похоже, что она хочет команду join, возможно, с сортировкой. Но с миллионами записей пришло время серьезно задуматься о настоящей СУБД.

join -t\; -o 0,2.2,2.3 <(sort -t\; -k 1,1 first) <(sort -t\; -k 1,1 second)

(Для этого требуется bash или zsh для синтаксиса <(command); для переноса вам потребуется сортировать по временным файлам или сохранять отсортированные входные файлы.)

1 голос
/ 31 мая 2011

grep -f:

-f FILE, --file=FILE
          Obtain patterns  from  FILE,  one  per  line.   The  empty  file
          contains  zero  patterns, and therefore matches nothing.  (-f is
          specified by POSIX.)

cut -d \;-f1-3:

-d, --delimiter=DELIM
          use DELIM instead of TAB for field delimiter

-f, --fields=LIST
          select only these fields;  also print any line that contains  no
          delimiter character, unless the -s option is specified

Собрать все вместе: grep -f pattern_file data_file | cut -d\; -f1-3.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...