Сопоставление файлов с разделителями табуляции

Я хочу сравнить информацию из файлов сопоставления, чтобы получить сшитую информацию в формате файла с разделителями табуляции.

Например, один файл содержит

COG0001 882.DVU3168 COG0002 883.DvMF_2502 COG0001 1140.Synpcc7942_0645 COG0001 1148.SYNGTS_2220 

Другой файл

 COG0001 H COG0002 E 

Окончательный файл должен содержать следующую информацию:

 COG0001 882.DVU3168 H COG0002 883.DvMF_2502 E COG0001 1140.Synpcc7942_0645 H COG0001 1148.SYNGTS_2220 H 

РЕДАКТИРОВАТЬ

Возвращаясь к моему вопросу, я также хотел бы напечатать информацию из файла 2 в файл 3.

Моя команда:

 awk -F $'\t' 'FNR==NR{a[$2]++;next}a[$1]''{print $0, ..... }' file2 file1 > file3 

Это даст мне все, начиная с file1, на основе сопоставления столбца 2 (file2) с столбцом 1 (file1).

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

С awk вы можете сделать это вот так:

 $ awk 'NR==FNR{a[$1]=$2;next}{print $0, a[$1]}' file2 file1 COG0001 882.DVU3168 H COG0002 883.DvMF_2502 E COG0001 1140.Synpcc7942_0645 H COG0001 1148.SYNGTS_2220 H 

Блок NR==FNR{a[$1]=$2;next} запускается для файла2, и он сохраняет второе поле на карте, используя первое поле в качестве ключа.

Блок {print $0, a[$1]} запускается для файла1, и он печатает текущую строку, за которой следует значение, полученное с карты.

Если вы хотите, чтобы данные были разделены на вкладку (с другими пробелами, не разделяющими поля), вы можете запустить awk -F'\t' ... , и если вы также хотите, чтобы вкладка вывода была ограничена, используйте awk -F'\t' -v OFS='\t' ...

Если вы не возражаете против порядка вывода:

 $ join <(sort file1) <(sort file2) COG0001 1140.Synpcc7942_0645 H COG0001 1148.SYNGTS_2220 H COG0001 882.DVU3168 H COG0002 883.DvMF_2502 E