我有像2000 fasta文件这样的结构:
Name_ID#_Name2_ID1...2000.fasta我想将文件名的顺序更改为:
Name2.Name_ID#_ID1...2000.fasta有人对我如何做到这一点有建议吗?
发布于 2020-07-12 02:16:59
解决这个问题有很多种方法。一种办法是:
#!/bin/bash
for i in *.fasta; do
tokens=( $(echo "${i}" | sed -e 's/_/ /g') )
newName="${tokens[2]}.${tokens[0]}_${tokens[1]}_${tokens[3]}'"
echo "mv ${i} ${newName}"
done此脚本循环遍历以.fasta结尾的当前目录中的每个文件;每次通过循环,变量${i}都包含当前文件名。
接下来,脚本使用sed将下划线(_)更改为文件名中的空格,并将其存储为令牌数组。对于一个名为Name_ID1_Name2_ID1000.fasta的文件,您的结果是:
tokens[0]='Name'
tokens[1]='ID1'
tokens[2]='Name2'
tokens[3]='ID1000.fasta'接下来,脚本根据这些令牌和您对所需顺序的描述创建newName。最后,脚本打印用于执行重命名的mv命令。
如果你运行这个脚本,它会打印它会做什么。你可以检查它,以确保它是你想要的行为。如果是这样,则可以删除echo:
mv "${i}" "${newName}"然后再运行一次。这样,它实际上将执行重命名。
https://unix.stackexchange.com/questions/598015
复制相似问题