如何自动化匹配文件名批量执行relplot.pl处理RNAfold输出文件对
批量处理RNAfold输出文件对的relplot.pl自动化方案
方法一:Bash基础循环(适合无特殊字符的文件名)
直接提取所有唯一的文件前缀,循环配对执行relplot.pl:
# 提取所有唯一前缀并批量处理 for prefix in $(ls *_ss.ps | sed 's/_ss\.ps$//' | sort -u); do # 先检查对应_dp.ps文件是否存在,避免报错 if [ -f "${prefix}_dp.ps" ]; then relplot.pl "${prefix}_ss.ps" "${prefix}_dp.ps" > "${prefix}_rss.ps" echo "已生成: ${prefix}_rss.ps" else echo "⚠️ 缺失对应文件: ${prefix}_dp.ps,跳过该组" fi done
说明:
ls *_ss.ps列出所有结构文件,sed 's/_ss\.ps$//'去掉后缀提取前缀,sort -u确保前缀唯一- 加入文件存在检查,避免因缺失文件导致命令报错中断
方法二:更稳健的find循环(支持含空格的文件名)
如果你的文件名包含空格或特殊字符,用find+while read的组合更可靠:
# 遍历当前目录下所有_ss.ps文件,配对处理 find . -maxdepth 1 -type f -name "*_ss.ps" | while read ss_file; do # 提取文件前缀(去掉路径和_ss.ps后缀) prefix=$(basename "$ss_file" _ss.ps) dp_file="${prefix}_dp.ps" if [ -f "$dp_file" ]; then relplot.pl "$ss_file" "$dp_file" > "${prefix}_rss.ps" echo "已生成: ${prefix}_rss.ps" else echo "⚠️ 缺失对应文件: $dp_file,跳过该组" fi done
说明:
find . -maxdepth 1限制只处理当前目录,-type f确保是文件basename命令安全提取前缀,不受路径和特殊字符影响
使用贴士
- 确保
relplot.pl可直接调用,若不在系统PATH中,替换成绝对路径(比如./relplot.pl或/path/to/relplot.pl) - 可以把上述代码保存为
batch_relplot.sh,执行chmod +x batch_relplot.sh赋予执行权限后,运行./batch_relplot.sh即可批量处理 - 若需要处理子目录中的文件,去掉
find命令中的-maxdepth 1参数即可
内容的提问来源于stack exchange,提问作者Amy H
相关产品推荐
相关产品推荐

