Как найти минимальные значения из массива - PullRequest
0 голосов
/ 10 июля 2019

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

rs1000 0.09 red
rs1000 0.01 blue
rs2000 0.07 yellow
rs2000 0.08 black

, и я пытаюсь взять минимальные значения во втором столбце для rs в первом.

Я ожидаю такой результат:

rs1000 0.01 blue
rs2000 0.07 Yellow

Мой файл слишком большой, чтобы использовать Excel, поэтому мне нужен сценарий linux для достижения моей цели.Можете ли вы предложить мне способ сделать это?

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

Самым быстрым, но не самым коротким, будет использование awk:

awk '(!($1 in m))||($2<m[$1]){m[$1]=$2; r[$1]=$0}END { for(i in r) print r[i] }' file

Совместимая с posix версия с сортировкой и awk будет:

$ sort -k1,1 -k2,2n file | awk '(f!=$1);{f=$1}'
0 голосов
/ 10 июля 2019

Вы можете использовать сортировку дважды:

sort -nk2,2 filename | sort -su -k1,1

Первый вызов сортирует имя файла по второму столбцу, второй выбирает уникальные значения из столбца 1. Сортировка GNU выбирает первую строку для каждого уникальногозначение, но я смутно помню некоторые другие реализации, ведущие себя по-разному.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...