2013-10-08 4 views
0

У меня есть два файла, как показано ниже, которые являются разделителями табуляции:добавить столбцы в AWK из двух файлов

файл А

chr1 123 aa b c d 
chr1 234 a b c d 
chr1 345 aa b c d 
chr1 456 a b c d 
.... 

файл B

chr1 123 aa c d e ff 
chr1 345 aa e f g gg 
chr1 123 aa c d e hh 
chr1 567 aa z c a ii 
chr1 345 bb x q r kk 
chr1 789 df f g s ff 
chr1 345 sh d t g ll 

... 

Я хочу, чтобы добавить новый столбец в файл A из файла B на основе двух ключевых столбцов «chr1», «123», т.е. (первые два столбца являются ключевыми столбцами). Если ключевые столбцы совпадают в обоих файлах, данные в столбце 7 в файле B следует добавить в столбец 3 в файле A.

Например, ключ (chr1 123) находится дважды в файле B, поэтому третий столбец в файле A имеет ff и hh, разделенные запятой. Если ключ не найден он должен поставить NA и результат должен выглядеть, как показано ниже: выхода:

chr1 123 ff,hh  aa b c d 
chr1 234 NA  a  b c d 
chr1 345 gg,kk,ll aa b c d 
chr1 456 NA  a b c  d 

Я обычно делаю это в R, но это занимает огромное количество времени для больших наборов данных. Может ли кто-нибудь предоставить awk-решение для ускорения задачи?

+1

Да, мы можем, но сначала показать ваши попытки угодить – fedorqui

+0

хорошо, я новичок в AWK, где я могу сделать небольшой файл обработки рода вещей, но не любой реальный код , Я делаю это в R, используя функцию коллапса и не имею понятия в awk. – chas

ответ

1

попробовать эту AWK строку:

awk -F'\t' -v OFS='\t' 'NR==FNR{a[$1FS$2]=a[$1FS$2]?a[$1FS$2]","$7:$7;next} 
{$3=(($1FS$2 in a)?a[$1FS$2]:"NA")FS $3}7' fileB fileA 
+0

спасибо, что работает – chas

+0

Привет, Можно ли добавить еще один столбец с указанным выше кодом. Мы добавили только столбец 7, также можем добавить еще один столбец «столбец 5» вместе с столбцом 7? Я играл с кодом, но не мог этого сделать. заранее спасибо – chas

Смежные вопросы