Bash:选择多个文件中指定列中具有最高值的行,并创建一个输出文件,其中包含包含最大值的行

Bash:选择多个文件中指定列中具有最高值的行,并创建一个输出文件,其中包含包含最大值的行

我有一个目录,其中包含类似名称的文件,如下所示

mi001
mi002
...
mi034
...

我想做的是找到第 14 列中的最高值。然后我想将具有最高值的整行附加到输出文件中。作为最终结果,我想要一个输出文件,其中包含每个原始文件的最高行。

样本文件

c1 c2 ... c14 c15
1 A ... 5 0.5
2 t ... 4 0.9

答案1

一个简单的方法就是对文件进行排序并从每个文件中选取最后一行。例如,

for file in mi*
do
    sort +13 -n $file | tail -1
done > result

+13对第 14 列进行排序,-n确保它按数字顺序排序。

如果+13不起作用,您可以将排序语句替换为

sort -k14,14 -n $file | tail -1

答案2

按照您提供的稀疏信息,awk将像这样工作(假设空格或制表符分隔的字段和第一行的标题):

awk 'NR == 2 {totmax=$14 ; maxline=$0 ; filemax[FILENAME]=$14 ; fileline[FILENAME]=$0}
     FNR>1 && $14 > totmax {maxline=$14; totmax=$14}
     FNR>1 && ($14 > filemax[FILENAME] || !filemax[FILENAME]) {filemax[FILENAME]=$14 ; fileline[FILENAME]=$0 }
     END {print "line with total maximum:\n"maxline
          print "maximums for files:"
          for (file in filemax) {print file":",fileline[file]}}' mi*

相关内容