在两个文件的列中查找匹配项
Find matches within columns in two files
我必须要这样的文件:
文件 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
因为两个文件之间的第一行有 2 个匹配项,第二行有 5 个匹配项。
我曾尝试使用 awk 将每个名称格式化为一个列,但结果一次得到许多列和比较。
有什么帮助吗?
谢谢
$ awk -v s=";" 'NR==FNR {a[]=s s; next}
{c=0; n=split(,b,s);
for(i=1;i<=n;i++) c+=(a[] ~ s b[i] s);
print ,c}' file1 file2
mir1 2
mir2 5
NB 这使用正则表达式匹配而不是字符串相等,只要您在值中没有正则表达式特殊字符就应该可以正常工作。
我必须要这样的文件:
文件 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
因为两个文件之间的第一行有 2 个匹配项,第二行有 5 个匹配项。
我曾尝试使用 awk 将每个名称格式化为一个列,但结果一次得到许多列和比较。
有什么帮助吗?
谢谢
$ awk -v s=";" 'NR==FNR {a[]=s s; next}
{c=0; n=split(,b,s);
for(i=1;i<=n;i++) c+=(a[] ~ s b[i] s);
print ,c}' file1 file2
mir1 2
mir2 5
NB 这使用正则表达式匹配而不是字符串相等,只要您在值中没有正则表达式特殊字符就应该可以正常工作。