2016-04-20 10 views
-1

Ich möchte bestimmte Zeilen und die folgenden Sequenzdaten extrahieren.Wie verwende ich Linux-Befehl zum Extrahieren von Sequenzdaten

Es gibt eine ecoli.ffn Datei wie folgt:

$head ecoli.ffn 
>ecoli16:g027092:GCF_000460315:gi|545267691|ref|NZ_KE701669.1|:551259-572036 
ATGAGCCTGATTATTGATGTTATTTCGCGT 
AAAACATCCGTCAAACAAACGCTGATTAAT 
>ecoli16:g000011:55989:gi|218693476|ref|NC_011748.1|:1128430-1131042 
GTGTACGCTATGGCGGGTAATTTTGCCGAT 
>ecoli16:g000012:55989:gi|218693476|ref|NC_011748.1|:1128430-1131042 
GTGTACGCTATGGCGGGTAATTTTGCCGAT 
CTGACAGCTGTTCTTACACTGGATTCAACC 
CTGACAGCTGTTCTTACACTGGATTCAACC 

und ein index.txt folgend

$head index.txt 
g000011 
g000012 

, was ich tun möchte, ist "index.txt aus ecoli.ffn extrahieren", Der ideale Ausgang ist:

>ecoli16:g000011:55989:gi|218693476|ref|NC_011748.1|:1128430-1131042 
GTGTACGCTATGGCGGGTAATTTTGCCGAT 
>ecoli16:g000012:55989:gi|218693476|ref|NC_011748.1|:1128430-1131042 
GTGTACGCTATGGCGGGTAATTTTGCCGAT 
CTGACAGCTGTTCTTACACTGGATTCAACC 
CTGACAGCTGTTCTTACACTGGATTCAACC 

Wie kann ich das tun?

Antwort

1

ein einfaches Skript ecoli.sh mit awk schreiben:

#!/bin/bash 
a=`cat index.txt` 
for i in $a 
do 
    cat ecoli.ffn|awk -F: -v i="$i" 'BEGIN{flag=0} {if($2 == i){print $0;flag=1;} if(flag ==1 && $2 != i){print $0; flag=0;} }' 
done 

dann müssen Sie dieses Skript in der Shell ausgeführt werden.

+0

Danke, guodongxiaren. Aber nur die erste Zeile der Daten wird auf Ihre Art extrahiert. Eigentlich ist die wirkliche ecoli.ffn ist tatsächlich so: '> ecoli16: g027092: GCF_000460315: gi | 545267691 | ref | NZ_KE701669.1 |: 551.259-572.036 ATGAGCCTGATTATTGATGTTATTT CGCGTAAAACATCCGTCAAACAAAC GCTGATTAATGGATTCAACCGGATT > ecoli16: g000011: 55989: gi | 218693476 | ref | NC_011748.1 |: 1.128.430-1.131.042 GTGTACGCTATGGCGGGTAATTTTG CCGATCTGACAGCTGTTCTTACACT GGATTCAACCGGATTCAACCGGATT > ecoli16: g000012: 55989: gi | 218693476 | ref | NC_011748.1 |: 1.128.430-1.131.042 GTGTACGCTATGGCGGGTAATTTTG CCGATCTGACAGCTGTTCTTACACT ' – Ming

+0

einige Vorschläge:' BEGIN {flag = 0} 'ist nutzlos und kann entfernt werden. '{if ($ 2 == i) {print $ 0; flag = 1;}' kann als '$ 2 == i {print; flag = 1} 'ähnlich für den nächsten Block. Egal, ich denke nicht, dass dies die richtige Antwort für die Frage ist. – karakfa

1

awk zur Rettung!

$ awk -F: -v RS=">" 'NR==FNR{n=split($0,t,"\n"); 
          for(i=1;i<n;i++) a[t[i]]; 
          next} 
        $2 in a{printf "%s", RS $0}' index file 

>ecoli16:g000011:55989:gi|218693476|ref|NC_011748.1|:1128430-1131042 
GTGTACGCTATGGCGGGTAATTTTGCCGATCTGACAGCTGTTCTTACACTGGATTCAACC 
>ecoli16:g000012:55989:gi|218693476|ref|NC_011748.1|:1128430-1131042 
GTGTACGCTATGGCGGGTAATTTTGCCGATCTGACAGCTGTTCTTACACTGGATTCAACC 

UPDATE Beachten Sie, dass dies nicht davon abhängt, wie viele Zeilen sind für jeden Datensatz gibt. Für die aktualisierte Eingabedatei wird elbe Skript geben Sie diese Ausgabe

$ awk -F: -v RS=">" 'NR==FNR{n=split($0,t,"\n"); 
          for(i=1;i<n;i++) a[t[i]]; 
          next} 
        $2 in a{printf "%s", RS $0}' index file 

>ecoli16:g000011:55989:gi|218693476|ref|NC_011748.1|:1128430-1131042 
GTGTACGCTATGGCGGGTAATTTTGCCGAT 
>ecoli16:g000012:55989:gi|218693476|ref|NC_011748.1|:1128430-1131042 
GTGTACGCTATGGCGGGTAATTTTGCCGAT 
CTGACAGCTGTTCTTACACTGGATTCAACC 
CTGACAGCTGTTCTTACACTGGATTCAACC 
+0

Danke, karakfa. Es funktioniert jetzt. Es kann jedoch nur die erste Zeile jeder Gensequenzierung extrahieren. Der wirkliche Fall ist, dass für jedes Gen mehr als zwei Reihen von Sequenzen existieren. Da ein Gen eine Linie hat, können andere drei oder sogar mehr Linien haben. Wie in diesem Fall zu retten? Danke noch einmal. – Ming

+0

Es sollte egal sein, wie viele Zeilen da sind,>> 'ist der Indikator oder die Datensätze. Wenn Ihre Tests anders lauten, geben Sie bitte ein Beispiel an, dass der Fall nicht ordnungsgemäß funktioniert. – karakfa

+0

Da ich gerade die Frage aktualisiert habe. In diesem Fall funktioniert es wie folgt:> ecoli16: g000011: 55989: gi | 218693476 | ref | NC_011748.1 |: 1128430-1131042 GTGTACGCTATGGCGGGTAATTTTGCCGAT > ecoli16: g000012: 55989: gi | 218693476 | ref | NC_011748.1 | : 1128430-1131042 GTGTACGCTATGGCGGGTAATTTTGCCGAT ' – Ming

Verwandte Themen