Поиск закономерностей между двумя файлами

Поиск закономерностей между двумя файлами

File1содержит список генов (обозначенных буквами). Каждый ген описан белком, который он экспрессирует (обозначенным буквами):

a-1
b-2
c-3

File2также содержит список генов, но каждый из них повторяется несколько раз. Некоторые из этих генов похожи на гены File1:

a
a
a
b
b
c
c
c

Мне нужно будет найти все гены в , File1которые являются общими в File2. Общие гены должны быть напечатаны в третьем файле (и множественные копии тоже). Вместе с этим, тип белка, который экспрессируют гены, должен быть записан вместе с ним (точно так же, как в File1).

Как я могу получить следующее File3?

a-1
a-1
a-1
b-2
b-2
c-3
c-3
c-3

решение1

Вот простой способ сделать это с помощью gawk, в котором есть встроенная переменная ARGIND— индекс ARGVтекущего обрабатываемого файла.

Мы разделяем каждую входную строку первого файла на -и используем первое поле для индексации в массив table, который хранит всю строку. Для второго файла (и любых последующих файлов) мы используем всю строку как индекс в tableдля извлечения нужной строки.

BEGIN{FS = "-"}
ARGIND==1{table[$1] = $0}
ARGIND>1{print table[$0]}

Или в одной строке:

awk 'BEGIN{FS = "-"}; ARGIND==1{table[$1] = $0}; ARGIND>1{print table[$0]}' file_1 file_2

Вот еще одна версия, которая будет работать на традиционном awk. Она определяет, является ли текущий файл первым, сравнивая FNR, номер входной записи в текущем входном файле, с NR, общим числом входных записей, просмотренных до сих пор.

awk -F'-' 'NR==FNR{table[$1] = $0}; NR>FNR{print table[$0]}' file_1 file_2

Связанный контент