In de bioinformatica worden DNA-, RNA- of eiwitsequenties doorgaans opgeslagen in tekstbestanden die opgemaakt zijn volgens het FASTA formaat. De sequenties zelf worden voorgesteld als strings die enkel bestaan uit hoofdletters of kleine letters. FASTA bestanden kunnen meerdere records bevatten, waarbij elke record één enkele sequentie voorstelt. Een record bestaat uit één regel met een beschrijving, gevolgd door één of meer regels met de opeenvolgende fragmenten van de sequentie. Regels met een beschrijving kunnen onderscheiden worden van regels met een sequentiefragment door het feit dat het eerste karakter van de beschrijvingsregels een groter-dan teken (>) is.

Het FASTA bestand in onderstaand voorbeeld bevat drie records. Om aan te geven dat het aantal sequentiekarakters per regel niet vast ligt, hebben we de sequenties in het voorbeeld telkens opgesplitst over verschillende regels die een vast aantal karakters bevatten. Maar zelfs binnen één record is het toegelaten om te werken met sequentiefragmenten van variabele lengte.

>seq1
AAAAAAAAGGTGCGGAGGAAAGCAACACATTTGTTCCTCAGGACTCTTCA
GCGGGAGATATCTGCA
>seq2
CTCTCGGAAGTTTGTCCGCACCGACATAAATAGACTGATACTGATCAGGGGGACGGTACG
ACCCACTCTGTCGATCGAACCAGTGACCT
>seq3
aaaaaaaaacgtcagaaacgtgagtagggttacccacacgcatctaagaatgctcgggcaatgtgacggt
atgaagttgagagc

Opgave

Schrijf een bash shell script format waaraan een FASTA bestand moet doorgegeven worden. Het shell script moet de records in het FASTA bestand uitschrijven naar stdout, rekening houdend met de volgende opties die het shell script moet ondersteunen:

Het shell script moet voor de verwerking van de opties de flexibiliteit aan de dag leggen die gebruikelijk is bij Unix commando's: volgorde van opties speelt geen rol, opties kunnen eventueel samengenomen worden, argument bij een optie moet niet noodzakelijk van de optieletter gescheiden worden door witruimte, …. Daarnaast moet het shell script de volgende foutafhandeling voorzien:

Zie onderstaande voorbeeldsessie voor wat we telkens bedoelen met de gepaste boodschap die moet uitgeschreven worden naar stderr.

Voorbeeld

Bij onderstaande voorbeeldsessie gaan we ervan uit dat het bestand seq.fasta1 zich in de huidige directory bevindt.

$ cat seq.fasta2
>seq1
AAAAAAAAGGTGCGGAGGAAAGCAA
CACATTTGTTCCTCAGGACTCTTCG
CGGGAGATATCTGCA
>seq2
CTCTCGGAAGTTTGTCCGCACCGACATAAATAGACTGATACTGATCAGGGGGACGGTACG
ACCCACTCTGTCGATCGAACCAGTGACCT
>seq3
aaaaaaaaacgtcagaaacgtgagtagggttacccacacgcatctaagaatgctcgggcaatgtgacggt
atgaagttgagagc
$ format seq.fasta3
>seq1
AAAAAAAAGGTGCGGAGGAAAGCAACACATTTGTTCCTCAGGACTCTTCAGCGGGAGATATCTGCA
>seq2
CTCTCGGAAGTTTGTCCGCACCGACATAAATAGACTGATACTGATCAGGGGGACGGTACGACCCACTCTGTCGATCGAAC
CAGTGACCT
>seq3
aaaaaaaaacgtcagaaacgtgagtagggttacccacacgcatctaagaatgctcgggcaatgtgacggtatgaagttga
gagc
$ format -u -w 60 seq.fasta4
>seq1
AAAAAAAAGGTGCGGAGGAAAGCAACACATTTGTTCCTCAGGACTCTTCAGCGGGAGATA
TCTGCA
>seq2
CTCTCGGAAGTTTGTCCGCACCGACATAAATAGACTGATACTGATCAGGGGGACGGTACG
ACCCACTCTGTCGATCGAACCAGTGACCT
>seq3
AAAAAAAAACGTCAGAAACGTGAGTAGGGTTACCCACACGCATCTAAGAATGCTCGGGCA
ATGTGACGGTATGAAGTTGAGAGC
$ format -l -w42 seq.fasta5
>seq1
aaaaaaaaggtgcggaggaaagcaacacatttgttcctcagg
actcttcagcgggagatatctgca
>seq2
ctctcggaagtttgtccgcaccgacataaatagactgatact
gatcagggggacggtacgacccactctgtcgatcgaaccagt
gacct
>seq3
aaaaaaaaacgtcagaaacgtgagtagggttacccacacgca
tctaagaatgctcgggcaatgtgacggtatgaagttgagagc
$ format -L seq.fasta6
Syntaxis: format [-w breedte] [-u|-l] FASTA
$ echo $?
1
$ format -ul seq.fasta7
Syntaxis: format [-w breedte] [-u|-l] FASTA
$ echo $?
2
$ format -w DERTIG seq.fasta8
Syntaxis: format [-w breedte] [-u|-l] FASTA
$ echo $?
3
$ format seq1.fasta seq2.fasta
Syntaxis: format [-w breedte] [-u|-l] FASTA
$ echo $?
4