【问题标题】:bash - rename fasta headers and filenames within subdirectories - append prefixbash - 在子目录中重命名 fasta 标头和文件名 - 附加前缀
【发布时间】:2015-05-03 10:02:47
【问题描述】:

我的文件结构的简化示例如下:

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

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

  1. 遍历每个子目录 (A_velvet, BB_velvet) - 将菌株名称 (A, BB) 添加为所有文件的前缀 (即 A_contigs.fasta, A_file.log)。
  2. 为 contigs.fasta 文件中的 fasta 标头添加相同的前缀。 也许使用 sed 命令替换 ('s/>NODE/>${name}/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    

【问题讨论】:

  • 你得到什么输出?你怎么知道它不起作用?
  • @DaleWilson - 输出只是一个错误,第 5 行:`*': not a valid identifier.

标签: bash recursion sed rename bioinformatics


【解决方案1】:

您循环浏览目录内容的方法不起作用。在第一种情况下,循环中的唯一项目是 $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  

【讨论】:

  • 感谢您查看我的问题@heathobrien。当我尝试您修改后的代码时,什么也没发生。好的是错误消失了,但不好的是子目录中的文件没有被重命名。所以尝试了一些修改,但似乎仍然无法得到它。我取出了 if 语句(第 4 行和第 9 行) - 然后它给出以下警告消息:Assemblies/A_velvet/: name : ls: cannot access Assemblies/A_velvet/:: No such file or directory contigs.fasta name contigs.fasta ls: cannot access contigs.fasta: No such file or directory
  • 我希望实现的输出是:Assemblies/A_velvet/A_contigs.fasta
  • 尝试将 $dir/ 放在 $subdir 前面的任何位置。您还需要将最后一行更改为: mv $dir/$subdir/$file $dir/$subdir/${name}_$file
  • 感谢您的帮助@heathobrien。非常感谢。
猜你喜欢
  • 2011-06-14
  • 1970-01-01
  • 2012-08-15
  • 2021-11-27
  • 2016-08-03
  • 1970-01-01
  • 2022-11-16
  • 2020-08-29
相关资源
最近更新 更多