Unix: объединить файлы на основе значения столбца - PullRequest
3 голосов
/ 21 марта 2012

У меня есть два файла, которые выглядят так:

Файл 1 (2 столбца):

ID1 123
ID2 234
ID3 232
ID4 344
...

Файл 2 (> 1 миллион столбцов)

ID2 A C ...
ID3 G T ...
ID1 C T ...
ID4 A C ... 
...

Я хочу добавить значения из столбца 2 файла 1 на основе идентификатора в файл 2 в качестве второго столбца.Таким образом, объединенный файл должен выглядеть следующим образом:

ID2 234 A C ...
ID3 232 G T ...
ID1 123 C T ...
ID4 344 A C ... 
...

Точно так же, как файл 2 (в том же порядке строк), но с добавленным вторым столбцом.Идентификаторы - это значения первого столбца (присутствуют в обоих файлах).Файл 1 имеет больше строк / идентификаторов, чем файл 2. Все идентификаторы из файла 2 находятся в файле 1, но не все идентификаторы из файла 1 находятся в файле 2.

Кто-нибудь знает, как это сделать в unix / bash??Большое спасибо!

1 Ответ

6 голосов
/ 21 марта 2012
$ join <(sort file1) <(sort file2)
ID1 123 C T ...
ID2 234 A C ...
ID3 232 G T ...
ID4 344 A C ...

Если вы хотите сохранить порядок file2

$ join -1 1 -2 2 <(sort file1) <(cat -n file2 | sort -k2,2) | sort -k3,3n | cut -d' ' -f1-2,4-
ID2 234 A C ...
ID3 232 G T ...
ID1 123 C T ...
ID4 344 A C ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...