2016-10-26 2 views
0

Ich möchte einige Genom FASTA-Dateien mit einigen Informationen der ersten Zeile umbenennen, aber ich kann es nicht herausfinden. HierUmbenennen von FASTA-Dateien mit einem Teil ihrer ersten Zeile

ist ein Beispiel, zwei Dateien:

GCA_000007365.1_ASM736v1_genomic.fna:

>AE013218.1 Buchnera aphidicola str. Sg (Schizaphis graminum), complete genome 
ATGTCAAAGTCGTATTTAAAAAATTTTGATGTTATTGTTATTGGTGGAGGGCATGCTGGCACTGAAGCTGCAGCAGCCTC 
TGCAAGAGTAGGTTGTAAAACATTATTATTAACTCAAAAAATAACTGATATAGGTGTATTATCTTGCAATCCTGCTATCG 

GCA_000012065.2_ASM1206v2_genomic.fna:

>CP000048.1 Borrelia hermsii DAH, complete genome 
TACCACTACACTTATTAATAATACATACTCACGCCTGGGGGGAAAAATTCAATAATGGAAACCTTACAAATATAAAACCA 
CTACAAATAGGTATTATTCAGCATAATTATATAAATTTAACTCCTTATAATCAACATTATAAATATTACGCTTTCATTGG 

Ich möchte tausend *.fna Dateien mit Informationen von der ersten Zeile umbenennen in der FASTA-Datei geben:

Buchnera_aphidicola_AE013218.1.fna 
Borrelia_hermsii_CP000048.1.fna 

Der FASTA-Header bleibt unverändert. Nur der Dateiname.

+0

Was _exactly_ geht in den Dateinamen? Die ersten drei Wörter in der Reihenfolge 2, 3, 1 ohne das '>', verbunden mit Unterstrichen? Etwas anderes? –

+0

Genau @ BenjaminW. Wörter 2, 3, 1 getrennt mit "_" (2_3_1) ohne das ">" und sonst nichts. – Tetraodienne

Antwort

1

Sie können Schleife über alle .fna Dateien, extrahieren Sie die Worte, ordnen sie mit awk und legte sie in einen mv Befehl wie folgt aus:

for fname in *.fna; do 
    mv -- "$fname" \ 
    "$(awk 'NR==1{printf("%s_%s_%s\n",$2,$3,substr($1,2));exit}' "$fname")".fna 
done 

Hinzufügen eines echo vor dem mv Befehl seine Ausgangs Ergebnisse zu sehen in

mv -- GCA_000007365.1_ASM736v1_genomic.fna Buchnera_aphidicola_AE013218.1.fna 
mv -- GCA_000012065.2_ASM1206v2_genomic.fna Borrelia_hermsii_CP000048.1.fna 

Die -- ist sicher zu stellen, dass die Dateinamen mit Bindestrich beginnen nicht als Optionen zu mv interpretiert werden. 1

Hier ist, was der awk-Befehl in der Befehlsersetzung der Fall ist, besser lesbar:

NR == 1 { 
    printf("%s_%s_%s\n", $2, $3, substr($1, 2)) 
    exit 
} 

Die Formatierungsstring für printf die ersten drei Worte umlagert; substr Entfernen Sie die führende > aus dem ersten Wort. verhindert, dass der Rest der Datei verarbeitet wird; Es würde das Ergebnis nicht ändern, aber die Dinge verlangsamen.


mehr tragbar wäre mv "./$fname" "./$(...)"; -- ist ein GNUism, soweit ich weiß.

+0

So perfekt! Vielen Dank! – Tetraodienne

+0

Hallo nochmal @BenjaminW. das Problem ist $ 2 kommt mit einem Leerzeichen am Anfang (versuchen, es richtig einzufügen) ''Buchnera_aphidicola_AE013218.1.fna'' – Tetraodienne

+0

@Tetraodienne Hast du die Anführungszeichen richtig hinzufügen? Es könnte passieren, wenn du "$ (awk ...)" eingegeben hast. Fna' anstatt "$ (awk ...)" .fna', aber ich sehe nicht, wie sonst. Der resultierende Dateiname beginnt mit einem Leerzeichen, richtig? –

Verwandte Themen