我有许多文件,每个文件都包含许多数组(如下面的输入 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
代码片段即可。