2016-10-26 79 views
0

我想使用第一行的一些信息重命名一些基因組FASTA文件,但我無法弄清楚。用第一行的一部分重命名FASTA文件

下面是一個例子,有兩個文件:

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 

我想用第一線的信息重新命名一千*.fna文件在FASTA文件中,給出:

Buchnera_aphidicola_AE013218.1.fna 
Borrelia_hermsii_CP000048.1.fna 

FASTA頭保持不變。只是文件名。

+0

什麼_exactly_進入文件名?前三個字按順序2,3,1沒有'>',用下劃線連接?還有別的嗎? –

+0

正是@BenjaminW。單詞2,3,1以「_」(2_3_1)分隔,沒有「>」而沒有別的。 – Tetraodienne

回答

1

您可以遍歷所有.fna文件,提取的話,使用awk重新排列它們並把它們放到一個mv命令是這樣的:

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

添加一個echomv命令來查看它的輸出結果

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

--是確保用連字符開頭的文件名不會被解釋爲選項mv

以下是在命令替換awk命令的確,更清晰:

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

printf用於格式化串重新排列第三個字; substr從第一個字中刪除前導>exit阻止正在處理的文件的其餘部分;它不會改變結果,但會減慢速度。


更多便攜式將mv "./$fname" "./$(...)";據我所知,--是GNUism。

+0

非常完美!謝謝! – Tetraodienne

+0

再次@BenjaminW。問題是$ 2是非常開心的白色空間(試圖正確粘貼)'''Buchnera_aphidicola_AE013218.1.fna'' – Tetraodienne

+0

@Tetraodienne您是否正確添加了引號?如果你輸入'「$(awk ...)」.fna'而不是'「(awk ...)」.fna',可能會發生這種情況,但我不知道怎麼回事。您的結果文件名以空格開頭,對吧? –

相關問題