Intereting Posts
Команда Spawn не найдена Команда Faillog на CentOS7 В терминале терминологии, как мне изменить его оболочку входа? Как ограничить доступ к локальной файловой системе пользователя? Каков наилучший метод? fail2ban отлично работает при неудачных попытках SSH, но не работает при неудачных попытках Apache2 Mode_switch + Shift не совпадает с Shift + Mode_Switch? позиционирование окна Openbox Разрешите себе папки Windows, смонтированные на CentOS 7 VM Мне нужна файловая система, когда я не хочу хранить какие-либо данные Проблемы с внешним жестким диском Seagate Есть ли другое ядро ​​linux для разных архитектур? В чем разница между pkill и killall? Linux: как проверить, замедляется ли процесс другими запущенными процессами Минимальная Linux с ядром и BusyBox: / etc / inittab игнорируется, выполняется только / init Получите все регулярные выражения между двумя шаблонами и напечатайте их в файл

Grep / awk / sed для строк, состоящих только из двух букв, и строк, начинающихся с буквы и встречающих определенную длину

Не знаете, сколько людей знакомы с данными секвенирования ДНК, но если это часть моего файла (строки, начинающиеся с «>», это идентификаторы, а строки, начинающиеся с буквы, являются последовательностями ДНК):

>NB501013:9:HJJ75BGXX:4:13609:24076:18015/2 GGGGGGGAAAAAAA >NB501013:9:HJJ75BGXX:4:21602:19346:16945/2 CTCGTCGCATCACAAAGGGAT >NB501013:9:HJJ75BGXX:3:11407:17650:13229/2 CCGCGGGCCGGTGCGGGGGTTTTTTTGTTTTTTTGGTTACAACGGGTGGG >NB501013:9:HJJ75BGXX:3:13509:1817:13239/2 CAGCCC >NB501013:9:HJJ75BGXX:4:22611:20567:13384/2 GAATA 

Я бы хотел удалить строку: GGGGGGGAAAAAAA

Наряду с его идентификатором последовательности (я знаю, вы можете сделать это с помощью grep -B1 ). Но кто-нибудь знает, как удалить строки, которые состоят только из двух букв?

Кроме того, для последовательностей, которые короче 5 букв, я хотел бы удалить их вместе со своими идентификаторами, я не могу просто grep для строк дольше определенной длины, потому что все идентификаторы довольно длинные, поэтому мне нужно как-то использовать grep -v на строках, начинающихся с буквы (поэтому не начинается с «>») и дольше определенной длины.

Поэтому мой выборка будет:

 >NB501013:9:HJJ75BGXX:4:21602:19346:16945/2 CTCGTCGCATCACAAAGGGAT >NB501013:9:HJJ75BGXX:3:11407:17650:13229/2 CCGCGGGCCGGTGCGGGGGTTTTTTTGTTTTTTTGGTTACAACGGGTGGG >NB501013:9:HJJ75BGXX:3:13509:1817:13239/2 CAGCCC 

Дайте grep с помощью P erl C ompatible RE gexp module:

  • для удаления двух букв:

     pcregrep -Mv '>.*\n([ACGT])\1*([ACGT])\2*(\1|\2)*$' file 

    вывод:

     >NB501013:9:HJJ75BGXX:4:21602:19346:16945/2 CTCGTCGCATCACAAAGGGAT >NB501013:9:HJJ75BGXX:3:11407:17650:13229/2 CCGCGGGCCGGTGCGGGGGTTTTTTTGTTTTTTTGGTTACAACGGGTGGG >NB501013:9:HJJ75BGXX:3:13509:1817:13239/2 CAGCCC >NB501013:9:HJJ75BGXX:4:22611:20567:13384/2 GAATA 
  • для удаления комбинации из 5 букв или меньше:

      pcregrep -Mv '>.*\n[ACGT]{1,5}$' file 

    вывод:

     >NB501013:9:HJJ75BGXX:4:13609:24076:18015/2 GGGGGGGAAAAAAA >NB501013:9:HJJ75BGXX:4:21602:19346:16945/2 CTCGTCGCATCACAAAGGGAT >NB501013:9:HJJ75BGXX:3:11407:17650:13229/2 CCGCGGGCCGGTGCGGGGGTTTTTTTGTTTTTTTGGTTACAACGGGTGGG >NB501013:9:HJJ75BGXX:3:13509:1817:13239/2 CAGCCC 
 #!/usr/bin/env perl # # Usage: thisscriptname < someinputfile use strict; use warnings; while (1) { exit if eof; # rash assumption there are always pairs of ID and sequence lines # NOTE these contain a newline, so many need chomp() depending # on what you do with them... my $id = readline; my $seq = readline; # calculate unique sequence letters via hash (is there also a U # or something? been a few decades since AP bio...) my %chars; $chars{$_}++ for $seq =~ m/[ATGC]/g; # business logic time! if (keys %chars > 2 and length $seq >= 5) { print $id; print $seq; } } 

Вы можете рассмотреть возможность изменения файла, тестирования последовательности ДНК, и если тест пройдет, проигнорируйте эту строку и следующую строку:

 tac file | awk '!/^>/ && (length($1) < 5 || $1 == "GGGGGGGAAAAAAA") {getline; next} 1' | tac