在多行文件的一行中找到最高值

时间:2019-02-04 14:55:57

标签: bash perl awk

我有一个包含不同行的文件,并希望在第二列开始的每一行中查找并输出最高值。可以使用bash或awk吗?

例如文件具有这种格式结构

136   0.369326 0.004999
137   0.003199 0.140172 0.055189 0.047191 0.520696 0.172565
138   0.000400 0.021596 0.095381 0.179164 0.065187
...
and so on"

我想要以下输出

136   0.369326
137   0.520696
138   0.179164
... and so on

谢谢

3 个答案:

答案 0 :(得分:1)

使用所有标记了问题的工具肯定是可能的。例如,在Perl中这很简单。

但是Stack Overflow不是代码编写服务,您没有向我们显示任何证据表明您已编写任何代码来解决问题,因此,我不会为您提供解决方案。这是一些伪代码,您可以将其用作解决方案的设计。

WHILE you can read a line from the file
  SPLIT the input record on whitespace
  PRINT the first element of the split record
  CALCULATE the maximum value of the remaining element
  PRINT the maximum value
END WHILE

因此,您需要知道如何执行以下操作:

  • 从文件中读取数据记录
  • 在空格上分割字符串
  • 打印数据
  • 在值列表中找到最大值

答案 1 :(得分:0)

为Perl标记时:

#!/usr/bin/perl
use strict;
use warnings;

use List::Util qw(max);

while (<DATA>) {
    chomp;
    my($key, @numbers) = split(/\s+/);
    print "${key}\t", max(@numbers), "\n";
}

__DATA__
136   0.369326 0.004999
137   0.003199 0.140172 0.055189 0.047191 0.520696 0.172565
138   0.000400 0.021596 0.095381 0.179164 0.065187

试运行:

$ perl dummy.pl
136     0.369326
137     0.520696
138     0.179164

答案 2 :(得分:0)

Perl单缸纸

$ cat stephane.txt
136   0.369326 0.004999
137   0.003199 0.140172 0.055189 0.047191 0.520696 0.172565
138   0.000400 0.021596 0.095381 0.179164 0.065187

$ perl -lane ' @x=sort {$a<$b} @F[1..$#F]; print "$F[0] $x[0]" ' stephane.txt
136 0.369326
137 0.520696
138 0.179164

$