Bash/Awk:使用重叠坐标查找两个文件中的常见易位
Bash/Awk: Find common translocations in two files using overlapping coordinates
我想比较两个文件以确定常见易位。但是,这些易位在文件之间的坐标并不完全相同。所以我想看看易位是否发生在同一对染色体(chr1,chr2)之间,坐标是否重叠。
以下是两个文件的示例:
file_1.txt:
chr1 min1 max1 chr2 min2 max2
1 111111 222222 2 333333 444444
2 777777 888888 3 555555 666666
15 10 100 15 2000 2100
17 500 530 18 700 750
20 123456 234567 20 345678 456789
file_2.txt:
chr1 min1 max1 chr2 min2 max2
1 100000 200000 2 400000 500000
2 800000 900000 3 500000 600000
15 200 300 15 2000 3000
20 150000 200000 20 300000 500000
objective是文件1和文件2的chr1和chr2对是相同的,那么两个文件的坐标min1和max1必须重叠。 min2 和 max2 相同。
对于结果,也许最好的解决方案是打印如下两行:
1 111111 222222 2 333333 444444
1 100000 200000 2 400000 500000
2 777777 888888 3 555555 666666
2 800000 900000 3 500000 600000
20 123456 234567 20 345678 456789
20 150000 200000 20 300000 500000
(对于这个简化的例子,我试图表示我可能遇到的不同类型的重叠。我希望它足够清楚)。
感谢您的帮助。
awk
救援!
$ awk 'function overlap(x1,y1,x2,y2) {return y1>x2 && y2>x1}
{k= FS }
NR==FNR {r[k]=[=10=]; c1min[k]=; c1max[k]=; c2min[k]=; c2max[k]=; next}
overlap(c1min[k],c1max[k],,) &&
overlap(c2min[k],c2max[k],,) {print r[k] ORS [=10=] ORS}' file1 file2
1 111111 222222 2 333333 444444
1 100000 200000 2 400000 500000
2 777777 888888 3 555555 666666
2 800000 900000 3 500000 600000
20 123456 234567 20 345678 456789
20 150000 200000 20 300000 500000
假定第一个文件可以保存在内存中并在末尾打印一个额外的空行。
我想比较两个文件以确定常见易位。但是,这些易位在文件之间的坐标并不完全相同。所以我想看看易位是否发生在同一对染色体(chr1,chr2)之间,坐标是否重叠。
以下是两个文件的示例:
file_1.txt:
chr1 min1 max1 chr2 min2 max2
1 111111 222222 2 333333 444444
2 777777 888888 3 555555 666666
15 10 100 15 2000 2100
17 500 530 18 700 750
20 123456 234567 20 345678 456789
file_2.txt:
chr1 min1 max1 chr2 min2 max2
1 100000 200000 2 400000 500000
2 800000 900000 3 500000 600000
15 200 300 15 2000 3000
20 150000 200000 20 300000 500000
objective是文件1和文件2的chr1和chr2对是相同的,那么两个文件的坐标min1和max1必须重叠。 min2 和 max2 相同。
对于结果,也许最好的解决方案是打印如下两行:
1 111111 222222 2 333333 444444
1 100000 200000 2 400000 500000
2 777777 888888 3 555555 666666
2 800000 900000 3 500000 600000
20 123456 234567 20 345678 456789
20 150000 200000 20 300000 500000
(对于这个简化的例子,我试图表示我可能遇到的不同类型的重叠。我希望它足够清楚)。
感谢您的帮助。
awk
救援!
$ awk 'function overlap(x1,y1,x2,y2) {return y1>x2 && y2>x1}
{k= FS }
NR==FNR {r[k]=[=10=]; c1min[k]=; c1max[k]=; c2min[k]=; c2max[k]=; next}
overlap(c1min[k],c1max[k],,) &&
overlap(c2min[k],c2max[k],,) {print r[k] ORS [=10=] ORS}' file1 file2
1 111111 222222 2 333333 444444
1 100000 200000 2 400000 500000
2 777777 888888 3 555555 666666
2 800000 900000 3 500000 600000
20 123456 234567 20 345678 456789
20 150000 200000 20 300000 500000
假定第一个文件可以保存在内存中并在末尾打印一个额外的空行。