Portál AbcLinuxu, 19. července 2025 19:05
>contig00001 lenght=194432 ATTTAATGCCTCCACCACTAACGTTGAATCGTGCTGTTTCTGCAATCGCCAACCAACCAc BBGACGCCGCGCCAGGTTCATCACGATTGCTAAATAATGCCATTCCCCCTGTACCTTCAA CTGACGCCGCGCCAGGTTCATCACGATTGCTAAATAATGCCATTCCCCCTGTACCTTCAA DTGACGCCGCGCCAGGTTCATCACGATTGCTAAATAATGCCATTCCCCCTGTACCTTCAA >contig00002 lenght=187674 ETGACGCCGCGCCAGGTTCATCACGATTGCTAAATAATGCCATTCCCCCTGTACCTTCAA FTGACGCCGCGCCAGGTTCATCACGATTGCTAAATAATGCCATTCCCCCTGTACCTTCAA GGTTCGTTATTACAATGAGGAAAGAATACAATTAAAATTAAATGGACTGAGCCCTGTTCB >contig00003 lenght=187674 HTGACGCCGCGCCAGGTTCATCACGATTGCTAAATAATGCCATTCCCCCTGTACCTTCAA IGTTCGTTATTACAATGAGGAAAGAATACAATTAAAATTAAATGGACTGAGCCCTGTTCBRegexp:
sed -n -e '0,/>contig00002/d;/>contig00003/q;p' foo.txtVystup:
ETGACGCCGCGCCAGGTTCATCACGATTGCTAAATAATGCCATTCCCCCTGTACCTTCAA FTGACGCCGCGCCAGGTTCATCACGATTGCTAAATAATGCCATTCCCCCTGTACCTTCAA GGTTCGTTATTACAATGAGGAAAGAATACAATTAAAATTAAATGGACTGAGCCCTGTTCB
Doporučuji vybodnout se na sed
a použít awk
.
Šel bych na to tak, že bych napsal awk
skript:
contig.awk
:
#!/usr/bin/awk -f BEGIN { output = 0 while (getline key < key_file) ++keys[key] } $0 in keys { print $0; output = 1; next } /^>contig/ { output = 0; next } output { print $0 }
Skript by měl být spustitelný:
chmod +x contig.awk
Skript bere soubor se seznamem hlaviček jako argument (proměnnou) key_file
, zatímco velký soubor, ze kterého má vyfiltrovat sekvence, bere jako standardní vstup a píše pak na standardní výstup.
Když budu mít následující dva soubory, …
contigs.txt
:
>contig00001 len=194432 ATTTAATGCCTCCACCACTAACGTTGAATCGTGCTGTTTCTGCAATCGCCAACCAACCAC TTGACGCCGCGCCAGGTTCATCACGATTGCTAAATAATGCCATTCCCCCTGTACCTTCAA >contig00002 len=187674 TGTTCGTTATTACAATGAGGAAAGAATACAATTAAAATTAAATGGACTGAGCCCTGTTCA ATACAGAATTCAGTCCTTAAAATAACAGTCTAACTTTTCGGGGTCAGATCACAGTAATAG >contig00003 len=113760 AATTATTTAATTTGCCATGTTTCTTTATTTCTGCACTTTGGCAAAATGGGCAGTTTTTTA TTCATATTTCAAAAAGAGGGCTTAAAGCCTTGTACTATAAGGCTTTAAGCCACTTTTTAG
keys.txt
:
>contig00001 len=194432 >contig00003 len=113760
…spustím to celé takto:
./contig.awk -v key_file=keys.txt < contigs.txt
To^^^ mi vypíše (celé) dvě sekvence z contigs.txt
podle klíčů v keys.txt
, včetně těch klíčů a bez ohledu na délku sekvencí. Pokud jsem zadání správně pochopil, tohle by mělo být ono.
Samozřejmě by sis to musel trochu upravit v případě, že formát souborů umožňuje prázdné řádky a/nebo komentáře.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.