我有这个脚本:
#!/bin/bash
FASTQFILES=~/Programs/ncbi-blast-2.2.29+/DB_files/*.fastq
FASTAFILES=~/Programs/ncbi-blast-2.2.29+/DB_files/*.fasta
clear
for file in $FASTQFILES
do cat $FASTQFILES | perl -e '$i=0;while(<>){if(/^\@/&&$i==0){s/^\@/\>/;print;}elsif($i==1){print;$i=-3}$i++;}' > ~/Programs/ncbi-blast-2.2.29+/DB_files/"${FASTQFILES%.*}.fasta"
mv $FASTAFILES ~/Programs/ncbi-blast-2.2.29+/db/
done
我正在尝试抓取$FASTQFILES
中定义的文件,执行.fastq
到.fasta
转换,使用相同的输入文件名命名输出,并将其移至一个新文件夹。例如,~/./DB_files/HELLO.fastq
应该转换~/./db/HELLO.fasta
问题是转换的输出是第一个文件夹中名为.fasta
的格式正确的隐藏文件,而不是名为HELLO.fasta
的预期文件。所以mv
没有任何内容。我想我在${FASTQFILES%.*}.fasta
论证中搞砸了,但我似乎无法解决它。
答案 0 :(得分:2)
我看到三个问题:
您遇到问题的一部分原因是您使用cat $FASTQFILES
代替cat $file
。
您还需要将该行末尾的I / O重定向修复为> ~/Programs/ncbi-blast-2.2.29+/DB_files/"${file%.fastq}.fasta"
。
mv
命令需要在循环外执行。
事实上,在一次处理单个文件时,您根本不需要使用cat
(UUOC - 无用的猫)。只需提供"$file"
作为Perl脚本的参数。