Найдите максимальное значение 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начинать с символа 1 столбца 3, так как sort всегда обрабатывает пробел как разделитель. Конечно, можно 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

Связанный контент