Мои данные выглядит следующим образом:Как выбрать строки с максимальным значением на основе одного столбца и группы по второму столбцу с помощью awk?
1 161 a
1 48 b
1 30 c
2 199 d
2 1306 d
2 1290 d
2 81 d
2 51 e
2 82 e
2 93 e
3 64 e
3 99 f
3 123 f
Для каждого значения в третьем столбце, я хочу, чтобы выбрать строку, имеющий максимальное значение в колонке 2 и группы по колонке 1. Таким образом, требуемый выход
1 161 a
1 48 b
1 30 c
2 1306 d
2 93 e
3 64 e
3 123 f
Группировка по первой колонке я имею в виду, я хочу результаты для всех различных значений в столбце 1. То, что я попытался с помощью это
awk '$2>max[$3]{max[$3]=$2; row[$3]=$0} END{for (i in row) print row[i]}' file
Я получаю следующий результат
1 161 a
1 48 b
1 30 c
2 1306 d
2 93 e
3 123 f
Но я пропускаю следующую строку в результате
3 64 e
Это потому, что это один вкладыш выбора только максимальное значение в колонке 2 для различных значений в колонке 3, Как мне группировать это по столбцу 1, чтобы получить желаемый результат для каждого значения в столбце 1?
попробуйте выполнить поиск -r -n -k2 <файл | awk '\! x [$ 1, $ 3] ++' | sort -k1 –
@soFan: Мне нравится идея, но пара исправлений из вашей команды 'sort -r -n -k2
Inian
@inian, сделайте пожалуйста. –