在 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