Я пытаюсь использовать awk для разбора таблицы с разделителями табуляции - в первом столбце есть несколько повторяющихся записей, и мне нужно удалить повторяющиеся строки, которые имеют меньшую общую сумму из остальных 4 столбцов в таблице. Я могу легко удалить первый или второй ряд и суммировать столбцы, но у меня проблемы с объединением двух. Для моих целей не будет более двух дубликатов.Проблемы с объединением awk-скриптов
Пример файла: http://pastebin.com/u2GBnm2D
Желаемый выход в этом случае было бы удалить строки:
lmo0330 1 1 0 1
lmo0506 7 21 2 10
И держать две другие строки с тем же идентификатором гена в столбце. Окончательный разобран файл будет выглядеть следующим образом: http://pastebin.com/WgDkm5ui
Вот что я пытался (. Это не делает ничего Но первая часть удаляет второй дубликат, а вторая часть суммирует отсчеты):
awk 'BEGIN {!a[$1]++} {for(i=1;i<=NF;i++) t+=$i; print t; t=0}'
Я попытался изменения 2-ой части сценария в лучший ответ этого вопроса: Removing lines containing a unique first field with awk?
awk 'FNR==NR{a[$1]++;next}(a[$1] > 1)' ./infile ./infile
Но, к сожалению, я не очень понимаю, что происходит достаточно хорошо, чтобы заставить его работать. Может кто-нибудь мне помочь? Я думаю, что нужно заменить a[$1] > 1
части с [удалить (первым дублирует счетчик или второй счетчик дубликата в зависимости от того, который больше]
EDIT:.. Я также использую GNU Awk 3.1.7, если это имеет значение
Ваш вопрос в порядке, но это ч чтобы понять, чего вы точно хотите. – peterh
Я добавил ссылку на то, как будет выглядеть результат после синтаксического анализа, помогает ли это выяснить вопрос? – 1225
Это ОЧЕНЬ старая версия gawk, вы должны ее обновить, поскольку вам не хватает очень полезной функциональности. –