Bash: найти максимум n-го столбца с условиями на других столбцах - PullRequest
0 голосов
/ 12 октября 2018

У меня есть файл болота с 3 столбцами, и я хочу найти максимум третьего столбца и записать всю строку, когда они имеют одинаковый первый столбец.Я уже задавал свой вопрос, но проблема в том, что у меня есть более одного ряда с максимальным количеством.Теперь я хочу выбрать, чтобы во втором столбце было наибольшее значение!

Мой предыдущий вопрос

Мои данные:

    1 234 0.01
    1 235 0.05
    1 236 0.05
    1 237 0.02
    2 234 0.09
    2 235 0.09
    2 236 0.08
    2 237 0.05

Выход:

    1 236 0.05
    2 235 0.09

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

Использование инструментов оболочки:

$ sort -k3nr -k2nr file | uniq -w 5
    2 235 0.09
    1 236 0.05

Работает, если ваш первый столбец может соответствовать определенному количеству символов.man uniq:

-w, --check-chars=N
       compare no more than N characters in lines

Работает для первого столбца фиксированной ширины, например:

1    Second column
1000 Second column

, но не:

1 Second
1000 Second
0 голосов
/ 12 октября 2018

Решение 1-е: Не могли бы вы попробовать следующее.Это позаботится о порядке значения первого поля согласно Input_file.

awk '
FNR==NR{
  b[$1]=a[$1]>$3?b[$1]:$0
  a[$1]=a[$1]>$3?a[$1]:$3
  next
}
($1 in a){
  print b[$1]
  delete a[$1]
}
'   Input_file  Input_file

Решение 2-е: В случае, если вас не волнует порядок$1 (первое поле) на выходе.

awk '{b[$1]=a[$1]>$3?b[$1]:$0;a[$1]=a[$1]>$3?a[$1]:$3} END{for(i in a){print b[i]}}' Input_file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...