объединение двух текстовых файлов на основе общих строк с использованием awk - PullRequest
0 голосов
/ 17 мая 2018

У меня есть 2 табуляция текста, как в следующих примерах:

маленький пример 1:

chr9    35689814    35689922    U2OS_Noco_input_peak_1972   77  .   4.84893 12.13092    7.77385 26
chr9    139793146   139793192   U2OS_Noco_input_peak_2029   49  .   6.30132 9.04134 4.96447 89
chr9    35748701    35748740    U2OS_Noco_input_peak_1974   197 .   10.68892    24.88541    19.76040    127
chr9    85677944    85678064    U2OS_Noco_input_peak_1980   44  .   3.93263 8.45104 4.42192 5
chr9    127631470   127631569   U2OS_Noco_input_peak_1997   148 .   11.29185    19.71885    14.86821    74
chr9    140512429   140512570   U2OS_Noco_input_peak_2045   113 .   9.54787 15.99886    11.37007    71

маленький пример2:

chr9    35748701    35748740    GBA2    0   -   35748701    35749983    0   5   223,269,514,524,276,    
chr9    117880410   117880530   TNC 0   -   117853297   117880536   0   17  
chr9    85677944    85678064    RASEF   0   -   85677782    85678092    0   2   261,310,    0,0,
chr9    35689814    35689922    TPM2    0   -   35689814    35691017    0   6   83,86,96,105,108,1203,  
chr9    139793146   139793192   TRAF2   0   +   139776363   139793192   0   16

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

chr9    35689814    35689922    U2OS_Noco_input_peak_1972   77  .   4.84893 12.13092    7.77385 26  chr9    35689814    35689922    TPM2    0   -   35689814    35691017    0   6   83,86,96,105,108,1203,  
chr9    35748701    35748740    U2OS_Noco_input_peak_1974   197 .   10.68892    24.88541    19.76040    127 chr9    35748701    35748740    GBA2    0   -   35748701    35749983    0   5   223,269,514,524,276,    
chr9    85677944    85678064    U2OS_Noco_input_peak_1980   44  .   3.93263 8.45104 4.42192 5   chr9    85677944    85678064    RASEF   0   -   85677782    85678092    0   2   261,310,    0,0,

Я пытаюсь следующий код в awk, но не вернул то, что я хочу.

awk FS=OFS='\t' infile1.txt infile2.txt '$1 = $1, $2= $2, $3=$3 {print $1"\t"$2"\t"$3"\t"$4"\t"$5"\t"$6"\t"$7"\t"$8"\t"$9"\t"$10"\t"$11"\t"$12"\t"$13"\t"$14"\t"$15"\t"$16"\t"$17"\t"$18"\t"$19}' > out.txt

Вы знаете, как это исправить?

1 Ответ

0 голосов
/ 17 мая 2018
$ awk 'BEGIN   {FS=OFS="\t"} 
               {k=$1 FS $2 FS $3} 
       NR==FNR {sub(k,OFS); a[k]=$0; next} 
       k in a  {print $0,a[k]}' file.2 file.1 | column -t

chr9  35689814   35689922   U2OS_Noco_input_peak_1972  77   .  4.84893   12.13092  7.77385   26   TPM2   0  -  35689814   35691017   0  6   83,86,96,105,108,1203,
chr9  139793146  139793192  U2OS_Noco_input_peak_2029  49   .  6.30132   9.04134   4.96447   89   TRAF2  0  +  139776363  139793192  0  16
chr9  35748701   35748740   U2OS_Noco_input_peak_1974  197  .  10.68892  24.88541  19.76040  127  GBA2   0  -  35748701   35749983   0  5   223,269,514,524,276,
chr9  85677944   85678064   U2OS_Noco_input_peak_1980  44   .  3.93263   8.45104   4.42192   5    RASEF  0  -  85677782   85678092   0  2   261,310,                0,0,

вам не хватает второй записи в ожидаемом результате.

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