Регекстегі жылдам файлдан нақты бірізділікті алыңыз

Мен кірістірілген файлдан n th дәйектілігін (немесе th жақсырақ th дәйектілігіне) шығарғым келеді, «бір-лайнер».

Perl (немесе кез келген басқа сценарий тілін), дәйектілігі мен дәйектілігін оқып шығатынымды білемін, бірақ мен дәйектілікті басып шығарамын, бірақ мен тезірек және ықшамды нәрсе іздеймін.

Бұндай білмейтіндер үшін, үлгі файлы келесідей көрінеді:

>SEQUENCE_1
MTEITAAMVKELRESTGAGMMDCKNALSETNGDFDKAVQLLREKGLGKAAKKADRLAAEG
LVSVKVSDDFTIAAMRPSYLSYEDLDMTFVENEYKALVAELEKENEERRRLKDPNKPEHK
IPQFASRKQLSDAILKEAEEKIKEELKAQGKPEKIWDNIIPGKMNSFIADNSQLDSKLTL
MGQFYVMDDKKTVEQVIAEKEKEFGGKIKIVEFICFEVGEGLEKKTEDFAAEVAAQL
>SEQUENCE_2
SATVSEINSETDFVAKNDQFIALTKDTTAHIQSNSLQSVEELHSSTINGVKFEEYLKSQI
ATIGENLVVRRFATLKAGANGVVNGYIHTNGRVGVVIAAACDSAEVASKSRDLLRQICMH
2
@Endoro Кешіріңіз, бұл түсініксіз. Егер менде жылдамдық файлында 10 дәйектілік бар болса және 5-ші суретті шығарғысы келсе, онда n = 5 болады. Мен келесі тақырыпты белгілейтін тақырыпты (ол басталады>) және төмендегі сызықтарды келесіге дейін қажет етеді. Бұл көмектеседі ме?
қосылды автор saladi, көзі
Сұрағыңызды сіз іздегенді дәл көрсету үшін жаңартыңыз ба? Міне, бұл менің қалаған нәтиже және бұл мен тырысты.
қосылды автор jaypal singh, көзі
Сұрағыңызды сіз іздегенді дәл көрсету үшін жаңартыңыз ба? Міне, бұл менің қалаған нәтиже және бұл мен тырысты.
қосылды автор jaypal singh, көзі
..... кім n ?
қосылды автор Endoro, көзі
..... кім n ?
қосылды автор Endoro, көзі

10 жауаптар

awk арқылы бір жол:

awk -v RS='>' -v start=$n -v end=$m 'NR>=(start+1)&&NR<=(end+1){print ">"$0}' fasta_file
2
қосылды

awk арқылы бір жол:

awk -v RS='>' -v start=$n -v end=$m 'NR>=(start+1)&&NR<=(end+1){print ">"$0}' fasta_file
2
қосылды

awk арқылы бір жол:

awk -v RS='>' -v start=$n -v end=$m 'NR>=(start+1)&&NR<=(end+1){print ">"$0}' fasta_file
2
қосылды

sed арқылы:

sed -n '/SEQUENCE_'$n'/,/SEQUENCE_'$(($m + 1))'/p' input | sed '$d'
2
қосылды

sed арқылы:

sed -n '/SEQUENCE_'$n'/,/SEQUENCE_'$(($m + 1))'/p' input | sed '$d'
2
қосылды

awk қолданатын екі жол бар.

Егер тізбектеріңіз әр жолға 1 оралған болса, бұл жұмыс істейді:

awk -v n=5 -v m=8 'NR == n * 2 - 1, NR == m * 2' file.fa

Егер тізбектегі сызықтарыңыз оралмаған болса, онда бұл дұрысырақ болуы мүмкін:

awk -v n=5 -v m=8 '/^>/ { C++ } c == n { f=1 } c == m + 1 { f=0 } f' file.fa
2
қосылды

awk қолданатын екі жол бар.

Егер тізбектеріңіз әр жолға 1 оралған болса, бұл жұмыс істейді:

awk -v n=5 -v m=8 'NR == n * 2 - 1, NR == m * 2' file.fa

Егер тізбектегі сызықтарыңыз оралмаған болса, онда бұл дұрысырақ болуы мүмкін:

awk -v n=5 -v m=8 '/^>/ { C++ } c == n { f=1 } c == m + 1 { f=0 } f' file.fa
2
қосылды

awk қолданатын екі жол бар.

Егер тізбектеріңіз әр жолға 1 оралған болса, бұл жұмыс істейді:

awk -v n=5 -v m=8 'NR == n * 2 - 1, NR == m * 2' file.fa

Егер тізбектегі сызықтарыңыз оралмаған болса, онда бұл дұрысырақ болуы мүмкін:

awk -v n=5 -v m=8 '/^>/ { C++ } c == n { f=1 } c == m + 1 { f=0 } f' file.fa
2
қосылды

one liner (no pipe | needed):

sed '/>SEQUENCE_'$n'/, />SEQUENCE_'$(($m + 1))'/!d;{/>SEQUENCE_'$(($m + 1))'/d}' file
2
қосылды

one liner (no pipe | needed):

sed '/>SEQUENCE_'$n'/, />SEQUENCE_'$(($m + 1))'/!d;{/>SEQUENCE_'$(($m + 1))'/d}' file
2
қосылды