如何根据选择比较标准记录数组元素的数量

如何根据选择比较标准记录数组元素的数量

我有很多文件,其中有很多 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。

其次,我需要选择每个矩阵的位置 (1,2) 的最低值,该位置具有较大的元素 (2,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...

相关内容