我有一个目录,其中包含类似名称的文件,如下所示
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*