Найти совпадения в столбцах в двух файлах - PullRequest
0 голосов
/ 02 мая 2018

Мне нужно, чтобы файлы выглядели так:

Файл 1

mir1    CAT1;DEM20;SCD;LIART;COLECC2
mir2    ELAM2;SIRT1;FROMO;PER1;PER2

Файл 2

mir1    DEM20;LIART;ACACA;FOXO1;DIPEM
mir2    ELAM2;SIRT1;FROMO;PER1;PER2

Я хочу сравнить оба файла в столбце 2, чтобы подсчитать совпадения в именах, разделенных символом «;», количество имен в столбце 2 может варьироваться, поэтому это только пример.

Желаемый результат должен быть примерно таким, как количество совпадений, скажем:

Файл 3

mir1    2
mir2    5

Поскольку есть два совпадения для первого ряда между обоими файлами и 5 совпадений для второго ряда.

Я пытался форматировать каждое имя как столбец с помощью awk, но в итоге получилось много столбцов и сравнений одновременно.

Любая помощь?

Спасибо

1 Ответ

0 голосов
/ 02 мая 2018
$ awk -v s=";" 'NR==FNR {a[$1]=s $2 s; next} 
                        {c=0; n=split($2,b,s); 
                         for(i=1;i<=n;i++) c+=(a[$1] ~ s b[i] s); 
                         print $1,c}' file1 file2

mir1 2
mir2 5

NB это использует сопоставление регулярному выражению вместо равенства строк, должно работать нормально, если в значениях нет специальных символов регулярного выражения.

...