【发布时间】:2019-06-02 08:55:12
【问题描述】:
我在同一个目录中有多个带有单个序列的 fasta 文件。我想用 fasta 文件中存在的单个序列的标题重命名每个 fasta 文件。当我运行我的代码时,我得到“替换模式未终止于(用户提供的代码)”
我的代码:
#!/bin/bash
for i in /home/maryem/files/;
do
if [ ! -f $i ]; then
echo "skipping $i";
else
newname=`head -1 $i | sed 's/^\s*\([a-zA-Z0-9]\+\).*$/\1/'`;
[ -n "$newname" ] ;
mv -i $i $newname.fasta || echo "error at: $i";
fi;
done | rename s/ // *.fasta
fasta 文件:
>NC_013361.1 Escherichia coli O26:H11 str. 11368 DNA, complete genome
AGCTTTTCATTCTGACTGCAATGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTCTCTGACAGCAGCTTCTGAACTG
GTTACCTGCCGTGAGTAAATTAAAATTTTATTGACTTAGGTCACTAAATACTTTAACCAATATAGGCATAGCGCACAGAC
AGATAAAAATTACAGAGTACACAACATCCATGAAACGCATTAGCACCACCATTATCACCACCATCACCATTACCACAGGT
我不确定是否有另一种方法可以用标题中的 ID 重命名每个文件??
【问题讨论】:
-
你有
[ -n "$newname" ]没有明显的原因。只是把它放在那里。此外,建议您使用$()而不是反引号。 (它们可以嵌套。) -
sed命令似乎不起作用,因为您在行首没有匹配>。您也不匹配似乎是 ID 一部分的_和.。
标签: bash sed rename file-rename fasta