2x2 배열이 많은 파일이 많이 있습니다. 이 예에서는 하나의 파일(파일 1)만 표시합니다.
입력 파일(파일 1):
1: 6.1703
541.631 46.0391
2: 6.1930
537.446 45.9239
3: 6.1931
177.171 288.579
4: 6.1939
167.171 298.579
5: 8.2281
533.686 53.7245
6: 8.6437
519.219 65.0547
7: 9.0823
484.191 95.0753
8: 9.3884
237.75 240.082
9: 9.4701
167.525 246.234
10: 9.7268
411.929 70.7877
먼저 각 행렬의 위치 (1,2) 값을 보고 6.1937에 가깝고 요소 (2,1)의 값이 더 큰 경우 선택해야 합니다. 이 예에서는 선택한 값이 6.1930이어야 합니다.
둘째, 더 큰 요소(2,2) 값을 갖는 각 행렬의 위치(1,2)에서 가장 낮은 값을 선택해야 합니다. 이 예에서 선택한 값은 6.1931입니다.
그래서 출력은 다음과 같아야합니다
6.1930 6.1931
답변1
Perl이 구조에 옵니다:
#!/usr/bin/perl
use warnings;
use strict;
my $close_to = 6.1937;
my ($close, $lowest);
$/ = q();
while (<>) {
my @arr = split;
if ((! defined $close || abs($arr[1] - $close_to) < abs($close - $close_to))
&& $arr[2] > $arr[3]
) {
$close = $arr[1];
}
if ((! defined $lowest || $arr[1] < $lowest)
&& $arr[2] < $arr[3]
) {
$lowest = $arr[1];
}
if (eof) {
print "$close $lowest\n";
undef $close;
undef $lowest;
}
}
다른 이름으로 저장 script.pl
, 다른 이름으로 전화script.pl file1 file2 file3...