首页 文章

bash - 在子目录中重命名fasta标头和文件名 - 追加前缀

提问于
浏览
0

我的文件结构的简化示例是:

/Assemblies/A_velvet/contigs.fasta
/Assemblies/A_velvet/info.log
/Assemblies/BB_velvet/contigs.fasta
/Assemblies/BB_velvet/info.log

我正在尝试编写一个可以传递Assemblies目录的脚本 - 然后它将:

  • 循环遍历每个子目录(A_velvet,BB_velvet) - 取应变名称(A,BB)将其作为前缀添加到所有文件中(即A_contigs.fasta,A_file.log) .

  • 在contigs.fasta文件中的fasta标头中添加相同的前缀 . 也许使用sed命令替换('s/>NODE/>$/g')?

我发现了很多非常密切相关的问题,但似乎无法让它们发挥作用 . 很感谢任何形式的帮助!这里是我到目前为止的代码:

#!/bin/bash
#Run with: ./test.sh <assembly_directory>
#dir= directory with all assemblies inside it
dir=$1
for subdir in $dir 
do
    if [ -d "${subdir}" ]; then
    name=`basename $subdir|cut -d '_' -f 1`;
    echo "${subdir} name ${name}"
         for * in $subdir;
        `do mv "$file" "$subdir/${name}_$(basename "$file")"; done
    fi
done

1 回答

  • 0

    循环遍历目录内容的方法不起作用 . 在第一种情况下,循环中唯一的项是$ dir . 我不确定你在第二种情况下要做什么 . 尝试这样的事情:

    dir=$1 
    for subdir in `ls $dir` 
    do
        if [ -d "${subdir}" ]; then
            name=`basename $subdir|cut -d '_' -f 1`;
            echo "${subdir} name ${name}"
            for file in `ls $subdir`;
            do mv "$file" "$subdir/${name}_$(basename "$file")"; done
        fi
    done
    

相关问题