在两个列上合并两个条件文件

用户名

我有两个类型的文件:

File1.txt

1 117458 rs184574713 rs184574713
1 119773 rs224578963 rs224500000
1 120000 rs224578874 rs224500045
1 120056 rs60094200 rs60094200
2 120056 rs60094536 rs60094536

File2.txt

10  120200  120400  A   0   189,183,107
1   0       119600  C   0   233,150,122
1   119600  119800  D   0   205,92,92
1   119800  120400  F   0   192,192,192
2   120400  122000  B   0   128,128,128
2   126800  133200  A   0   192,192,192

我想将第二个文件中包含的信息添加到第一个文件中。两个文件中的第一列需要匹配,而File1.txt中的第二列应处于File2.txt中第2列和第3列指示的间隔内。这样输出应如下所示:

1 117458 rs184574713 rs184574713 C  0   233,150,122
1 119773 rs224578963 rs224500000 D  0   205,92,92
1 120000 rs224578874 rs224500045 F  0   192,192,192
1 120056 rs60094200 rs60094200 F    0   192,192,192
2 120440 rs60094536 rs60094536 B    0   128,128,128

请用awk / perl ..或任何其他脚本帮助我。

杰帕尔·辛格(Jaypal Singh)

尝试以下操作:(考虑到您的输出中最后一个条目有错字。120056不在之间120400 122000

$ awk '
NR==FNR {
    a[$1,$2,$3]=$4 FS $5 FS $6;
    next
}
{
     for(x in a) {
         split(x,tmp,SUBSEP); 
         if($1==tmp[1] && $2>=tmp[2] && $2<=tmp[3]) 
             print $0 FS a[x]
      }
}' file2 file1
1 117458 rs184574713 rs184574713 C 0 233,150,122
1 119773 rs224578963 rs224500000 D 0 205,92,92
1 120000 rs224578874 rs224500045 F 0 192,192,192
1 120056 rs60094200 rs60094200 F 0 192,192,192
  • 您通读了第一个文件,创建了一个索引为列1,2和3的数组,其值分别为列4,5和6。
  • 对于第二个文件,您在数组中查找。对于每个键,请拆分键并检查第一列匹配和第二列是否在范围内。
  • 如果条件为true,则从文件1开始打印整行,然后打印array的值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章