удаление лишних данных - PullRequest
2 голосов
/ 26 июля 2011

У меня есть файл, который выглядит так (3 столбца и n строк)

chr8    101999980   102031975
chr8    101999980   102033533 
chr8    101999980   102033533 
chr8    101999980   102032736 
chr8    101999980   102034799 
chr8    101999980   102034799 
chr8    101999980   102034397
chr8    101999980   102032736

и из этих данных я хочу удалить лишние строки, и эти точные повторяющиеся данные могут присутствовать в любом месте этого набора данных с помощью сценария bash.

Ответы [ 3 ]

4 голосов
/ 26 июля 2011

Если важно поддерживать порядок:

awk '!c[$0]++' filename

Это можно прочитать следующим образом:

  • выдвигает каждую строку как ключ массива (c[$0]),
  • post-увеличивается (++) значение, чтобы вести подсчет таких строк, и
  • выполняет действие по умолчанию, только если строка никогда не была видна раньше (!)
    • n++ возвращает 0 или ложь, если n не установлено
    • действие по умолчанию {print}
3 голосов
/ 26 июля 2011

Вы можете передать свой файл через sort и uniq :

$ sort yourFile | uniq > newFile
1 голос
/ 26 июля 2011
sort yourfile | uniq > outputfile

Если заказ не имеет значения.

Работает на смежных одинаковых строках, поэтому вам нужна сортировка. В вашем файле сортировка не требуется, поскольку дубликаты располагаются рядом друг с другом. Если это не стандартный случай, сначала нужно отсортировать файл.

$ uniq yourfile | wc -l
6
$ sort yourfile | uniq | wc -l
6

С и без сортировки оба возвращают 6 строк, но вы не сказали, что это значение по умолчанию.

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