首页 > 解决方案 > 从多个文件中打印第 5 列中具有最小值的行

问题描述

如何从多个文件中打印第 5 列中具有最小值的行以及每行的文件名?

每个文件都有不同的行数 - 20、45、44...

file0
45 7 8 9 9
45 7 5 0 5
44 5 8 9 4
11 5 6 8 8

file1
78 77 8 5 9
78 9  9 7 1
77 8 5 5 5
10 2 3 3 3
88 9 6 5 2

file2
77 8 0 0 2 
3  3 6 9 8

期望的结果:

file0
45 7 5 0 5
file1
78 9 9 7 1
file2
77 8 0 0 2

也许在 $5 中找到最小值作为某个变量并打印一行,其中包含 $5 中的这个变量。

标签: awk

解决方案


一种方法(需要 GNU awk):

$ gawk 'BEGINFILE { minline = ""; minval = 1000000 }
        $5 < minval { minline=$0; minval=$5 }
        ENDFILE { print FILENAME; print minline }' file0 file1 file2
file0
44 5 8 9 4
file1
78 9  9 7 1
file2
77 8 0 0 2

minval如果 100 万太低,则设置为大于任何文件中第 5 列中的任何数字的某个数字。


推荐阅读