我有问题我想比较两个文件。第一个文件是参考:
ABCA4 INHR
AMT INHR
BTK ONKO1
PAP ONKO2
第二个文件用于比较:
3 1:2 T ENG1 ABCA4 ff
3 1:2 T ENG1 ABCA4 gg
5 1:4 A ENG20 AMT ll
6 1:5 G ENG12 BRB ds
7 1:6 T ENG8 PAP rg
7 1:6 T ENG8 PAP tt
我想比较第一个文件中的$ 1和第二个文件中的$ 5,如果第二个文件中的$ 5和$ 6之间的匹配打印,则第一个文件中的$ 2:
3 1:2 T ENG1 ABCA4 INHR ff
3 1:2 T ENG1 ABCA4 INHR gg
5 1:4 A ENG20 AMT INHR ll
6 1:5 G ENG12 BRB - ds
7 1:6 T ENG8 PAP ONKO2 rg
7 1:6 T ENG8 PAP ONKO2 tt
所有列均以制表符分隔。 感谢
答案 0 :(得分:1)
你可以这样做:
awk 'NR==FNR{a[$1]=$2;next}{$5=$5 "\t" (a[$5]?a[$5]:"-")}1' file1 file2
细节:
NR==FNR { # when the first file is processed
a[$1]=$2 # store the second field in an array with the first field as key
next # jump to the next record
}
{
$5=$5 "\t" (a[$5]?a[$5]:"-") # append a tab and the corresponding second
# field from the first file if it exists or -
}
1 # true, display the line
答案 1 :(得分:1)
用同样的逻辑awk。输出由制表符分隔。
awk -v OFS="\t" 'FNR==NR{a[$1]=$2;next}{if (a[$5]) $5=$5"\t"a[$5]; else $5=$5"\t""-"}1' file1 file2
输出,制表符分隔:
3 1:2 T ENG1 ABCA4 INHR ff
3 1:2 T ENG1 ABCA4 INHR gg
5 1:4 A ENG20 AMT INHR ll
6 1:5 G ENG12 BRB - ds
7 1:6 T ENG8 PAP ONKO2 rg
7 1:6 T ENG8 PAP ONKO2 tt