具有重复值的 VLOOKUP()
VLOOKUP() with repeated values
我正在处理一些典型的 VLOOKUP 问题,但由于重复的行而相当困难...
我有两个文件,例如:
文件 1
transcript1 miR1
transcript1 miR2
transcript2 miR5
transcript2 miR4
transcript2 miR1
transcript2 miR2
transcript3 miR5
transcript4 miR2
文件 2
transcript1 gene1
transcript2 gene1
transcript3 gene2
transcript4 gene2
我想给文件1中的转录本分配基因名,根据文件2得到:
transcript1 miR1 gene1
transcript1 miR2 gene1
transcript2 miR5 gene1
transcript2 miR4 gene1
transcript2 miR1 gene1
transcript2 miR2 gene1
transcript3 miR5 gene2
transcript4 miR2 gene2
我通常使用 OpenOffice 或 Excel 中的 VLOOKUP() 函数执行此任务,将 file2 粘贴到 file1 电子表格中。
但是这个函数似乎不适用于查找矩阵(文件 1 的第 1 列)中的重复行...
有谁知道这样做的方法吗?看似简单却想不通...
有任何 AWK、BASH、Excel/OpenOffice 方法吗?
谢谢。
您可以使用 join:
join file1 file2
输出(基于您的示例输入):
transcript1 miR1 gene1
transcript1 miR2 gene1
transcript2 miR5 gene1
transcript2 miR4 gene1
transcript2 miR1 gene1
transcript2 miR2 gene1
transcript3 miR5 gene2
transcript4 miR2 gene2
重要提示:必须对两个文件进行排序才能使 join
正常工作。
未排序的文件可以即时排序:
join <(sort file1) <(sort file2)
如果你的shell不支持命令替换,你可以使用临时中间文件:
sort file1 > sorted1
sort file2 > sorted2
join sorted1 sorted2
无论您的输入文件是否排序,这都有效:
$ awk 'NR==FNR{a[]=;next} {print [=10=], a[]}' file2 file1
transcript1 miR1 gene1
transcript1 miR2 gene1
transcript2 miR5 gene1
transcript2 miR4 gene1
transcript2 miR1 gene1
transcript2 miR2 gene1
transcript3 miR5 gene2
transcript4 miR2 gene2
我正在处理一些典型的 VLOOKUP 问题,但由于重复的行而相当困难...
我有两个文件,例如:
文件 1
transcript1 miR1
transcript1 miR2
transcript2 miR5
transcript2 miR4
transcript2 miR1
transcript2 miR2
transcript3 miR5
transcript4 miR2
文件 2
transcript1 gene1
transcript2 gene1
transcript3 gene2
transcript4 gene2
我想给文件1中的转录本分配基因名,根据文件2得到:
transcript1 miR1 gene1
transcript1 miR2 gene1
transcript2 miR5 gene1
transcript2 miR4 gene1
transcript2 miR1 gene1
transcript2 miR2 gene1
transcript3 miR5 gene2
transcript4 miR2 gene2
我通常使用 OpenOffice 或 Excel 中的 VLOOKUP() 函数执行此任务,将 file2 粘贴到 file1 电子表格中。
但是这个函数似乎不适用于查找矩阵(文件 1 的第 1 列)中的重复行...
有谁知道这样做的方法吗?看似简单却想不通...
有任何 AWK、BASH、Excel/OpenOffice 方法吗?
谢谢。
您可以使用 join:
join file1 file2
输出(基于您的示例输入):
transcript1 miR1 gene1
transcript1 miR2 gene1
transcript2 miR5 gene1
transcript2 miR4 gene1
transcript2 miR1 gene1
transcript2 miR2 gene1
transcript3 miR5 gene2
transcript4 miR2 gene2
重要提示:必须对两个文件进行排序才能使 join
正常工作。
未排序的文件可以即时排序:
join <(sort file1) <(sort file2)
如果你的shell不支持命令替换,你可以使用临时中间文件:
sort file1 > sorted1
sort file2 > sorted2
join sorted1 sorted2
无论您的输入文件是否排序,这都有效:
$ awk 'NR==FNR{a[]=;next} {print [=10=], a[]}' file2 file1
transcript1 miR1 gene1
transcript1 miR2 gene1
transcript2 miR5 gene1
transcript2 miR4 gene1
transcript2 miR1 gene1
transcript2 miR2 gene1
transcript3 miR5 gene2
transcript4 miR2 gene2