Intereting Posts
использование левой кнопки мыши для перемещения окна может вызвать замораживание (XFCE4 / Ubuntu 15.10) Inline debug (xxtrace) в скриптах экранный процесс в столицах Задача Cron запускаться каждую минуту с 11:00 до 6:00 Удалить пакет с yum, но оставить библиотеки на месте? Каков правильный способ отображения громкости системы в conky? Монетный двор – не удается войти в «домашний каталог …» В чем преимущество архивирования объектных файлов C в статической библиотеке (файл .a)? Напишите удаленный управляющий скрипт Лучшая * nix или * nux ОС для ноутбука Compaq Presario 2100 Правило sudoers запускает и останавливает eth interface linux distro, который является легким и работает в бесшовном режиме для использования в командной строке на VirtualBox Выполнение nmap в сети Что такое композитор (в общем), и который дает лучшую производительность (Ubuntu Mate 16.04)? клавиши со стрелками не работают с сеансом telnet терминала (termnetd)

Как распечатать пять самых высоких чисел из столбца?

У меня есть текстовый файл с четырьмя столбцами. Мне нужно прочитать до конца файла и напечатать наибольшее число из столбца3 (верхние 5 значений) вместе с столбцом 1.

input.txt

xm|340034177|ref|RT_235820.1| 139697 192 0 xm|161622288|ref|RT_340093.1| 153819 2607 0 xm|75755638|ref|RT_557407.1| 153821 1937 0 xm|108773031|ref|RT_678101.1| 161452 1688 0 xm|30352011|ref|RT_784766.1| 150568 105 0 

output.txt

 xm|161622288|ref|RT_340093.1| 2607 xm|75755638|ref|RT_557407.1| 1937 xm|108773031|ref|RT_678101.1| 1688 xm|340034177|ref|RT_235820.1| 192 xm|30352011|ref|RT_784766.1| 105 

 sort -k3n,3 filename | tail -5 | cut -d " " -f1,6-7 

Вышеуказанная команда будет сортировать файл в третьем поле. Теперь я передаю этот вывод команде tail чтобы напечатать верхние 5 чисел в третьем столбце. Однако, если вам нужен только первый столбец и этот третий столбец на выходе, вы можете вывести команду на выход командой cut .

тестирование

 cat filename T_235820.1| 139697 192 0 xm|161622288|ref|RT_340093.1| 153819 2607 0 xm|75755638|ref|RT_557407.1| 153821 1937 0 xm|108773031|ref|RT_678101.1| 161452 1688 0 xm|30352011|ref|RT_784766.1| 150568 105 0 T_235820.1| 139697 192 0 xm|161622288|ref|RT_340093.1| 153819 607 0 xm|75755638|ref|RT_557407.1| 153821 937 0 xm|108773031|ref|RT_678101.1| 161452 1881 0 xm|30352011|ref|RT_784766.1| 150568 1051 0 

Теперь я запускаю указанную выше команду в этом файле.

 sort -k3n,3 filename | tail -5 | cut -d " " -f1,6-7 

Результат, который я получаю,

 xm|30352011|ref|RT_784766.1| 1051 xm|108773031|ref|RT_678101.1| 1688 xm|108773031|ref|RT_678101.1| 1881 xm|75755638|ref|RT_557407.1| 1937 xm|161622288|ref|RT_340093.1| 2607 

РЕДАКТИРОВАТЬ

Вы можете добавить флаг -g для чисел с плавающей запятой и отрицательных чисел, если у вас есть файл. Команда будет выглядеть так:

 sort -k3ng,3 filename | tail -5 | cut -d " " -f1,6-7 

Вы можете отсортировать файл перед его обработкой с помощью awk :

 $ sort -rnk3 file | awk 'FNR < 6 {print $1,$3}' OFS="\t" xm|161622288|ref|RT_340093.1| 2607 xm|75755638|ref|RT_557407.1| 1937 xm|108773031|ref|RT_678101.1| 1688 xm|340034177|ref|RT_235820.1| 192 xm|30352011|ref|RT_784766.1| 105 

Или вы можете использовать perl самостоятельно для выполнения задания:

 $ perl -anle ' push @a, [$F[0],$F[2]]; END { $" = "\t"; print "@$_" for (sort { $b->[1] <=> $a->[1] } @a)[0..4]; } ' file xm|161622288|ref|RT_340093.1| 2607 xm|75755638|ref|RT_557407.1| 1937 xm|108773031|ref|RT_678101.1| 1688 xm|340034177|ref|RT_235820.1| 192 xm|30352011|ref|RT_784766.1| 105