更新(16/1/13)
鲍罗丁指出了另一种我完全忽略的可能性。
在实际文件中(我手动坐下来开始查看 46 个文件,每个文件大约 10MB 大),在某些情况下,对于File1中的特定值,File2中不存在较小的值(但存在较大的值)。
同样存在这样的情况,对于 File1 中的特定值,File2中不存在更大的值(但存在较小的值)
我在此处更新示例文件和所需的输出以反映此更新。
更新(13 年 15 月 1 日)
我已经更新了所需的输出以解决File1中的值与File2中的值 匹配的情况。感谢 Borodin 指出这种情况。
我有 2 个文件,如下所示:
文件 1
chr1 10227
chr1 447989
chr1 535362
chr1 856788
chr1 249240496
文件2
chr1 11017
chr1 11068
chr1 23525
chr1 439583
chr1 454089
chr1 460017
chr1 544711
chr1 546239
chr1 856788
chr1 249213429
chr1 249214499
chr1 249239072
我需要做的是file1中的 foreach 值,例如。10227
,从file2中 找到最接近的两个值。其中一个值会更大,而另一个值会更小。因此,考虑file110227
,在file2中最接近的值是和。现在需要计算差异,即=和=给出如下输出(制表符分隔):9250
11017
9250 - 10227
-977
11017 - 10227
790
期望的输出
chr1 10227 No 790 No Match
chr1 447989 No 6100 -8406
chr1 535362 No 9349 -75345
chr1 856788 Yes
chr1 249240496 No No Match -25997
我认为最快的方法是使用哈希来读取 2 个文件,将数字作为keys
并赋值1
。
到目前为止,我编写的代码给出了file210227
中所有值的差异。与和类似。我该如何阻止这种情况并仅找到最接近的数字之间的差异,一个是 > ,一个是 <447989
535682
10227
10227
代码
use 5.014;
use warnings;
#code to enter lsdpeak and pg4 data into hash with KEYS as the numerical values, VALUE as 1
#Assign filename
my $file1 = 'lsdpeakmid.txt';
my $file2 = 'pg4mid.txt';
#Open file
open my $fh1, '<', $file1 or die $!;
open my $fh2, '<', $file2 or die $!;
#Read in file linewise
my %hash1;
while(<$fh1>){
my $key1 = (split)[1];
$hash1{$key1} = 1;
}
my %hash2;
while(<$fh2>){
my $key2 = (split)[1];
}
foreach my $key1 (sort keys %hash1){
foreach my $key2 (sort keys %hash2){
say $key2-$key1;
}
}
#Exit
exit;
感谢您花时间解决问题。我将不胜感激任何评论/回答。