сохранить вторые или последние повторяющиеся строки, определенные двумя столбцами (все с целыми числами и отсортированы) - PullRequest
0 голосов
/ 15 июня 2011

У меня проблема с манипулированием дубликатами строк в файле.

В файлах с разделителями табуляции и несколькими столбцами могут быть две дубликаты, определяемые только двумя столбцами (первые два столбца).был отсортирован по этим двум столбцам, это означает, что повторяющиеся строки соседствуют друг с другом.Я просто хочу сохранить строку отправки / финала для таких двух дубликатов.

мой текущий файл (с разделителями табуляции, с несколькими столбцами, строки отсортированы по первым столбцам)

1 100 A T
1 101 T C
1 101 T TT
2 1000 C T
2 1001 T A

файл, который я хочу, удалить первый дубликат, определенный первыми двумя столбцами, сохранить все остальные строки и столбцы.

1 100 A T
1 101 T TT
2 1000 C T

Я хотел бы получить ваши подсказки по этой манипуляции с текстом.Я попробовал sed и awk.Но я не могу сделать это сам.Не могли бы вы дать какие-либо советы по моей проблеме?

Заранее спасибо.

Best, 2 1001 TA

1 Ответ

1 голос
/ 15 июня 2011

Что-то вроде этого возможно:

{
    lines[NR] = $0
}
END {
    for(i=1;i<=length(lines);i++){
        split(lines[i], current)
        split(lines[i+1], after)
        if((current[1] == after[1]) && (current[2] == after[2])){
            print lines[i+1]
            i+=1
        }
        else{
            print lines[i]
        }
    }
}

Выход:

$ awk -f s.awk input
1 100 A T
1 101 T TT
2 1000 C T
2 1001 T A

или, как указал @ripat, используйте sort (вместе с tac, чтобы сначала перевернуть список, чтобы выбрать второе совпадение):

$ tac input | sort -k1,1n -k2,2n -u
1 100 A T
1 101 T TT
2 1000 C T
2 1001 T A

Серьезно, начните принимать некоторые ответы, которые вы получили! В противном случае вероятность того, что люди будут отвечать на ваши вопросы, будет очень близка к 0, прочитайте FAQ https://stackoverflow.com/faq

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