Я хочу извлечь строки, если значения непрерывны для более чем 4 строк (если значение в столбце col1 одинаковое), но все строки (более 4 должны быть напечатаны) должны быть напечатаны.
Еслизначение в col1 равно, а значения в col2 и col3 идут непрерывно (как непрерывные числа) для более чем 4 следующих строк, а затем возвращают эти строки.Значение в col3 строки может быть равным или может быть меньше только до 100 на значение col2 следующей строки.
Здесь непрерывный не означает для 1 строки (что в 1 строке col3 - col2).Это означает значение col3 строки по сравнению со значением col2 следующей строки.
Мой файл ->
A 0 100
A1 0 100
A1 100 200
A1 200 300
A1 400 500
A1 500 600
A1 600 700
A1 700 800
A1 1600 1700
A2 100 200
A2 200 300
A2 400 500
A2 500 600
A2 600 700
A3 800 900
Требуемый вывод ->
A1 0 100
A1 100 200
A1 200 300
A1 400 500
A1 500 600
A1 600 700
A1 700 800
A2 100 200
A2 200 300
A2 400 500
A2 500 600
A2 600 700
Здесьэто еще один пример -> мой входной файл ->
A 0 100
A1 0 100
A1 100 200
A1 200 300
A1 500 600
A1 600 700
A1 700 800
A1 1600 1700
A2 100 200
A2 200 300
A2 400 500
A3 800 900
Вывод ->
"Нет строк непрерывных".
Теперь нет вывода, потому что должендолжно быть больше 4 строк, которые имеют одинаковое значение col1 и значение col3 этих строк должно быть равно или меньше на 100, по сравнению со следующей строкой.
Пока я пробовал это, но не работает ->
use strict;
use warnings;
*ARGV or die "No input file specified";
open *first, '<',$ARGV[0] or die "Unable to open input file: $!";
my @data;
while (<first>) {
if (not @data) {
@data = split;
next;
}
my @new = split /\s+/;
if ($new[0] eq $data[0] and $new[1] <= $data[2]+ 100) {
$data[2] = $new[2];
if ( $data[2] - $data[1] >= 500){
print join("\t", @new), "\n";
}
}
else {
@data = @new;
}
}
Любая помощь, пожалуйста.