получить верхние значения N на основе значения другого столбца - PullRequest
0 голосов
/ 01 мая 2020

У меня есть файл с двумя столбцами, который выглядит следующим образом:

a 3
a 7
b 6
a 6
b 1
b 8
c 1
b 1

Для каждого значения в первом столбце я хотел бы найти число первых N из второго столбца. Используя этот пример, я хотел бы найти верхние 2 значения в столбце 2 для каждой строки в столбце 1. Желаемый результат будет:

a 7
a 6
b 8
b 6
c 1

Я пытался сделать что-то подобное с awk, но я не настолько знаком с этим. Это дает максимум, а не верхнюю N:

awk '$2>max[$1]{max[$1]=$2; row[$1]=$0} END{for (i in row) print row[i]}'

Ответы [ 2 ]

2 голосов
/ 01 мая 2020

Не могли бы вы попробовать, используя sort + awk решение.

sort -k2 -s -nr Input_file | awk '++array[$1]<=2' | sort -k1,1 -k2,2nr

ИЛИ

sort -k2 -s -nr Input_file | sort -k1,1 -k2,2nr | awk '++array[$1]<=2'

Логическое краткое объяснение: Первые 2 команды сортировки используются для сортировки данных в соответствии с 1-м и 2-м полями, чтобы получить данные в правильном порядке (в соответствии с выборками OP), а затем передать свой вывод в awk, чтобы получить только 1-е или 2 вхождения каждого первого поле только по запросу.

1 голос
/ 01 мая 2020
$ sort -k1,1 -k2,2rn file | awk -v n=2 '(++cnt[$1])<=n'
a 7
a 6
b 8
b 6
c 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...