Perl 在两列上合并具有条件的两个文件
我有两个类型的文件: File1.txt File2.txt 我想将第二个文件中包含的信息添加到第一个文件中。两个文件中的第一列需要匹配,而File1.txt中的第二列应该位于File2.txt中的第2列和第3列指示的间隔内。因此,输出应如下所示: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
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尝试一些代码..在期待一些帮助之前尝试一些代码..在期待一些帮助之前尝试一些代码..在期待一些帮助之前尝试一些代码..在期待一些帮助之前感谢一百万。这很好。我很抱歉输入错误。谢谢一百万。这很好。我很抱歉输入错误。谢谢一百万。这很好我很好。我为拼写错误感到抱歉。非常感谢。这很好。我为拼写错误感到抱歉。