Нахождение строк с равными значениями, сравнение их столбцов и удаление строки меньшего значения - PullRequest
0 голосов
/ 23 февраля 2019

У меня есть следующая строка кода:

grep -nP ';MULTIALLELIC' biallelic.output | sort -k2 | awk -F'[:;\t]' '{print $1,$3,$9,$13}'

Это выводит:

2374 213 MID=212 GO=1
2462 213 MID=477 GO=137
2394 233 MID=232 GO=1
2464 233 MID=668 GO=1070
2185 24 MID=23 GO=1
2465 24 MID=752 GO=1083
2146 48 MID=354 GO=1010
1893 48 MID=47 GO=1
2219 58 MID=57 GO=1
2463 58 MID=595 GO=1057

Мне нужно сравнить значения GO на основе значения, найденного во втором столбце,Какая бы строка не имела большего значения GO, я хотел бы удалить этот номер строки из исходного файла.


Добавив awk '{print>$2}', я могу разделить строки на основе значения во втором столбце, но яя пытаюсь избежать записи результатов в файлы.

Чего мне не хватает?

Редактировать: На самом деле я пытаюсь удалить эти строки из biallelic.output, а не просто печатать, какие строки яхочу удалить.Извините за путаницу.

1 Ответ

0 голосов
/ 23 февраля 2019

Это будет сравнивать значения GO друг с другом и перечислять записи с более высокими значениями по сравнению с минимальным значением.

$ sed 's/GO=/& /' file | 
  sort -k2,2 -k5n      | 
  awk 'a[$2]++{if(!h) print h="Lines Removed From biallelic.output";
               print $1}'

Lines Removed From biallelic.output
2462
2464
2465
2146
2463

заголовок будет напечатан условно, если не сообщается значение.

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

, чтобы получить отфильтрованный вывод

$ sed 's/GO=/& /' file | 
  sort -k2,2 -k5n      | 
  awk '!a[$2]++ {sub(/GO= /,"GO="); print}'

2374 213 MID=212 GO=1
2394 233 MID=232 GO=1
2185 24 MID=23 GO=1
1893 48 MID=47 GO=1
2219 58 MID=57 GO=1
...