我从NCBI下载了多个fasta文件,并想用标题的一部分重命名它们:
标题示例:>KY705281.1 Streptococcus phage P7955, complete genome
文件名示例:KY705281.fasta
我们的想法是摆脱'KY705281.1'
和'complete genome'
以便仅保留链球菌噬菌体P7955
例如,一个输入文件将是:
>KY705281.1 Streptococcus phage P7955, complete genome
AGAAAGAAAAGACGGCTCATTTGTGGGTTGTCTTTTTTTGATTAAGTAATGAAGGAGGTGGATGTATTGG GCTAAATCAACGACAAAAACGATTTGCAGACGAATATTTGATATCTGGTGTCGCTTACAATGCAGCTATC AAAGCTGGGTATTCTGAGAAATACGCTAGAGCAAGAAGTCATACCTTGTTGGAAAATGTCGGCAT
将其内容重命名为KY705281.fasta
>Streptococcus phage P7955
AGAAAGAAAAGACGGCTCATTTGTGGGTTGTCTTTTTTTGATTAAGTAATGAAGGAGGTGGATGTATTGG GCTAAATCAACGACAAAAACGATTTGCAGACGAATATTTGATATCTGGTGTCGCTTACAATGCAGCTATC AAAGCTGGGTATTCTGAGAAATACGCTAGAGCAAGAAGTCATACCTTGTTGGAAAATGTCGGCAT
我是Linux的新手,但是以某种方式通过Google搜索,我知道可以使用一些awk / sed / grep命令轻松完成此操作。
任何建议将不胜感激
答案 0 :(得分:0)
一种方法可能是:
awk -F, 'FNR==1{match($1, "^>([^.]+)[^ ]+ (.*)", oFv); $1= ">" oFv[2]; sub(/ *complete genome */, "", $2);}{printf $0>oFv[1] ".fasta"}' somefiles*
这将保留旧文件并写入相应的新文件。
同样,这假设输入文件只有一行,就像您给的那样。
如果您想重命名旧文件并更改其内容,
考虑到您的系统和bash,我也认为是GNU awk和GNU sed,
请备份您的文件,然后尝试以下操作:
#!/usr/bin/bash
for file in somefiles*; do
nn="$(awk -F[\>.] '{printf $2 ".fasta";exit}' "file")"
sed -ri '1{s/^[^ ]* />/;s/, complete genome//;}' "file"
if [ ! -f "$nn"];
then
mv "file" "nn"
else
echo "'$nn' exists, skip '$file', its content already changed." | tee _err_.log
fi
done
或作为一个班轮:
for file in somefiles*; do nn="$(awk -F[\>.] '{printf $2 ".fasta";exit}' "$file")"; sed -ri '1{s/^[^ ]* />/;s/, complete genome//;}' "$file"; if [ ! -f "$nn" ]; then mv "$file" "$nn"; else echo "'$nn' exists, skip '$file', its content already changed." | tee _err_.log; fi; done