如何在具有多个数组的多个文件中选择最大编号的元素

如何在具有多个数组的多个文件中选择最大编号的元素

我有许多文件,每个文件都包含许多数组(如下面的输入 1 和 2)。每个数组的第二行都有两个元素编号。我需要使用逻辑标准为第二行的第一列和第二列选择最大数字,然后打印第一行的第二个数字。

例如,在下面显示的文件输入 1 中,我看到最大数字是 10.8(第二行第一列),因此我将打印 6.1703(这是位于该数组第一行的数字)。另一个最大的数字是 10.1261 (对于第二行的第二列),所以我将打印 6.1932 (这是位于该数组第一行的数字)

所以,我需要以这种方式输出许多数组。在这里,我们仅呈现两个文件和一个输出。

输入文件1

1: 6.1703
 10.8 2.6

2: 6.1932
 7.01640 10.1261

3: 6.5664
 6.356 8.1

4: 8.0923
 1.41 7.6

输入文件2

1: 7.2703
 3.8 8.6

2: 7.6892
 4.7 7.6576

3: 7.85874
 16.356 5.1

4: 9.8348
 4.1 3.6

输出

6.1703     6.1932
7.85874    7.2703

答案1

使用 GNU awk,您可以定义如何使用特殊数组对数组进行排序PROCINFO。这样问题就可以简化:

awk 'BEGIN{RS='\n\n'}{a[$3]=$2; b[$4]=$2} \
     END{PROCINFO["sorted_in"]="@ind_num_asc"; \
     for(i in a) x=a[i]; for(i in b) y=b[i]; print x,y}' file1

输出:

6.1703 6.1932

要对所有文件运行此命令,只需在 shell 中对所有文件进行循环或重新排列此awk代码片段即可。

相关内容