В perl
есть замечательная функция, называемая оператором диапазона. Он позволяет делать что-то вроде этого:
#!/usr/bin/env perl
use strict;
use warnings;
while ( <DATA> ) {
print if 6 ... /0 0/;
}
__DATA__
51 0 0 5
0 0.0 0.0 0
1 2 3 4 5 6 7 8
1, 2
0.998 0.567
3, 2 Rs12345
0.7 0.2
3, 2 Rs31256
0.56 0.311
3, 2 Rs25691
0 0
012.1313010310 0.1213212 0.2121331321
0.0121654564 0.254564564 0.25678646
0.02154 0.2485674354 0.2434
Вы можете проверить, находится ли между двумя регулярными выражениями, номерами строк или их сочетанием.
Хотя, глядя на это, возможно, проще просто:
while ( <DATA> ) {
next unless $. > 5;
last if /0 0/;
print;
}
Удобно - вы можете сделать это с помощью флага -p
, чтобы сделать его однострочным:
perl -pe 'next unless $. > 5; last if /0 0/' your_file
Потому что мы при использовании last
обработка прерывается (и прекращается чтение файла).
-p
- это параметр perl
, который заставляет его вести себя немного как sed
- он преобразует строку и затем печатает строку.