找到 Column3 的最大值并仅打印 Column1 和 2 的值

找到 Column3 的最大值并仅打印 Column1 和 2 的值

在 Unix 中,我试图找到一个命令,该命令可以找到 Column3 中的最大值,并在新文件中打印 Column2 和 Column1 中的相应值(但不是 Column3 中的值)。

 Column1     Column2     Column3
   A          1          25
   B          2          6
   C          3          2
   D          4          16
   E          5          10

Unix 命令应该是什么?我应该使用 grep、awk 还是 datamash?

答案1

我会用awk.假设数据的格式与示例数据完全相同,以下将产生所需的输出:

awk -v MAX=0 '{ if(NR>1 && $3>MAX){WANT1=$1; WANT2=$2; MAX=$3}} END{print WANT1, WANT2}' infile > outfile

答案2

假设您的数据格式完全按照您所述(尤其是第三列,数字全部左对齐)并且该数据是通过cat文件提供的,您可以尝试以下命令:

*input generating command* | sort -nrk3 | awk '{print $1 " " $2}' > output_file

如果您的数据是由其他命令或源提供的,请更改cat为其他命令。欲了解更多信息,请参阅这个帖子我基本上只是根据您的需求量身定制的。

编辑:

我稍微更改了上面的命令,因为不需要告诉sort从第 3 列字符 1 开始,因为排序总是将空白视为分隔符。sort正如一位用户指出的那样,当然也可以直接提供输入文件。如果标头也是数据的一部分,请将上述命令更改为:

*input generating command* | sort -nrk3 | awk '{if (NR>1) print $1 " " $2}' > output_file

答案3

awk '{if(NF>2 && $3>M){M=$3;print $1,$2} }' file1 | tail -1 > file2

相关内容