У меня есть два текстовых файла, разделенных табуляцией.
Файл 1:
21 114352848
6 73853300
17 53191768
13 28008170
35 34642708
25 18912643
Файл2:
ABHD17B 1 85806534 85893402
ACAT2 1 49011742 49029143
ACTN4 21 114352846 114428174
ADGRG6 1 33969266 34107014
AFDN 17 55435472 55536326
AGTPBP1 6 73853296 74033587
AHI1 13 28008167 28198117
AIG1 35 34642706 34886059
AKAP12 25 41614908 41711677
AKAP7 25 69361015 69483139
AKT2 16 113380376 113406769
ALDH16A1 1 107032288 107047268
Вывод:
ACTN4 21 114352846 114428174
AGTPBP1 6 73853296 74033587
AHI1 13 28008167 28198117
AIG1 35 34642706 34886059
Я хочу сделать регулярное выражение по столбцу.во-первых, я хочу проверить соответствие столбца 1 из файла 1 столбцу 2 из файла 2. Если да, то проверьте столбец 2 из файла 1, находится ли расположение в диапазоне номеров между столбцом 3 и столбцом 4 в файле 2.
мой код perl:
#!/usr/bin/perl
use warnings;
use strict;
my %hash;
my @values;
my @value;
my $line;
my $min;
my $max;
open my $IN1, '<', 'file1.txt' or die $!;
while (<$IN1>) {
my @values = split;
my $line = $values[1];
undef $hash{$values[0]};
}
close $IN1;
open my $IN2, '<', 'file2.txt' or die $!;
while (<$IN2>) {
chomp;
my @value = split;
my $min = $value[2];
my $max = $value[3];
if (exists $hash{$value[1]}) {
if ($line >= $min && $line <= $max){
print "$_\n";
}
}
}
close $IN2;
Я не уверен, почему мой код не работает.Я получил предупреждение: использование неинициализированной строки значения $ в числовом ge (> =) в строке .pl XX
Затем я хотел бы знать, есть ли другой эффективный способ написания сценариев для этого примера.