Следующая строка awk удалит дублирующую информацию.Есть 3 способа увидеть, как вы можете обнаружить дубликаты:
идентичное имя последовательности:
Короткая версия будет:
$ awk '/^>/{p=seen[$0]++}!p' file1.fasta file2.fasta file3.fasta ...
Однако следующая версия вносит немного большей ясности и позволяет любому пользователю быстро адаптировать ее к своим потребностям:
$ awk 'BEGIN{RS=">"; FS="\n"; ORS=""}
(FNR==1){next}
{ name=$1; seq=$0; gsub(/(^[^\n]*|)\n/,"",seq) }
!(seen[name]++){ print ">" $0 }' file1.fasta file2.fasta file3.fasta ...
Здесь мы ввели переменную name
, которая содержит имя последовательности, и переменную seq
который содержит саму последовательность.Многострочные последовательности перемещаются в одну строку в переменной.
Как уже говорилось ранее, это легко адаптируется при использовании других метрик для определения дублирования.Например:
Первая часть имени последовательности идентична:
$ awk 'BEGIN{RS=">"; FS="\n"; ORS=""}
(FNR==1){next}
{ name=$1; seq=$0; gsub(/(^[^\n]*|)\n/,"",seq) }
{ key=substr(name,1,index(s,"|")) }
!(seen[key]++){ print ">" $0 }' file1.fasta file2.fasta file3.fasta ...
последовательность идентична:
$ awk 'BEGIN{RS=">"; FS="\n"; ORS=""}
(FNR==1){next}
{ name=$1; seq=$0; gsub(/(^[^\n]*|)\n/,"",seq) }
!(seen[seq]++){ print ">" $0 }' file1.fasta file2.fasta file3.fasta ...
имя последовательности и последовательность идентичны:
$ awk 'BEGIN{RS=">"; FS="\n"; ORS=""}
(FNR==1){next}
{ name=$1; seq=$0; gsub(/(^[^\n]*|)\n/,"",seq) }
!(seen[name,seq]++){ print ">" $0 }' file1.fasta file2.fasta file3.fasta ...
В некоторых частях вы, конечно, можете очистить.Вам не всегда нужен name
для определения дубликата (см. идентичная последовательность ) или вам не всегда нужен seq
(см. идентичное имя последовательности ).это позволяет вам удалить некоторые части кода.Я просто сохранил это, без очистки, чтобы показать метод, который вы можете использовать.
примечание: вышеупомянутое использование Удалить строку, если поле дублируется