Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 在两列上合并具有条件的两个文件_Perl_Awk - Fatal编程技术网

Perl 在两列上合并具有条件的两个文件

Perl 在两列上合并具有条件的两个文件,perl,awk,Perl,Awk,我有两个类型的文件: File1.txt File2.txt 我想将第二个文件中包含的信息添加到第一个文件中。两个文件中的第一列需要匹配,而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 rs

我有两个类型的文件:

File1.txt File2.txt 我想将第二个文件中包含的信息添加到第一个文件中。两个文件中的第一列需要匹配,而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。。或任何其他脚本。

这是您在bash中执行此操作的方式(在awk的帮助下):

join-11-21\

这是您在bash中执行此操作的方式(在awk的帮助下):

join-11-21\

这是您在bash中执行此操作的方式(在awk的帮助下):

join-11-21\

这是您在bash中执行此操作的方式(在awk的帮助下):

join-11-21\
试一试:(考虑到您的输出中有一个输入错误。
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
$awk'
NR==FNR{
a[$1,$2,$3]=$4 FS$5 FS$6;
下一个
}
{
对于(a中的x){
拆分(x、tmp、SubSP);
如果($1==tmp[1]&&&$2>=tmp[2]&&&&$2请尝试以下操作:(考虑到您的输出中有一个输入错误。
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
$awk'
NR==FNR{
a[$1,$2,$3]=$4 FS$5 FS$6;
下一个
}
{
对于(a中的x){
拆分(x、tmp、SubSP);
如果($1==tmp[1]&&&$2>=tmp[2]&&&&$2请尝试以下操作:(考虑到您的输出中有一个输入错误。
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
$awk'
NR==FNR{
a[$1,$2,$3]=$4 FS$5 FS$6;
下一个
}
{
对于(a中的x){
拆分(x、tmp、SubSP);
如果($1==tmp[1]&&&$2>=tmp[2]&&&&$2请尝试以下操作:(考虑到您的输出中有一个输入错误。
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
$awk'
NR==FNR{
a[$1,$2,$3]=$4 FS$5 FS$6;
下一个
}
{
对于(a中的x){
拆分(x、tmp、SubSP);

如果($1==tmp[1]&&&$2>=tmp[2]&&&$2尝试一些代码..在期待一些帮助之前尝试一些代码..在期待一些帮助之前尝试一些代码..在期待一些帮助之前尝试一些代码..在期待一些帮助之前感谢一百万。这很好。我很抱歉输入错误。谢谢一百万。这很好。我很抱歉输入错误。谢谢一百万。这很好我很好。我为拼写错误感到抱歉。非常感谢。这很好。我为拼写错误感到抱歉。