Bash

Bash:在多個文件的指定列中選擇具有最高值的行,並創建一個輸出文件,其中行包含最大值

  • December 23, 2021

我有一個目錄,其中包含類似名稱的文件,如下所示

mi001
mi002
...
mi034
...

我想做的是在第 14 列中找到最大值。然後我想將具有最大值的整行附加到輸出文件中。作為最終結果,我想要一個具有每個原始文件中最高行的輸出文件。

樣本文件

一個簡單的方法就是對文件進行排序並從每個文件中提取最後一行。例如,

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

+13按第 14 列排序,-n確保按數字順序排序。

如果+13不起作用,您可以將排序語句替換為

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

根據您提供的稀疏資訊,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*

引用自:https://unix.stackexchange.com/questions/683533