从bash输入输出文件名

时间:2014-07-17 18:08:28

标签: bash input output filenames

我有这个脚本:

#!/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论证中搞砸了,但我似乎无法解决它。

1 个答案:

答案 0 :(得分:2)

我看到三个问题:

  1. 您遇到问题的一部分原因是您使用cat $FASTQFILES代替cat $file

  2. 您还需要将该行末尾的I / O重定向修复为> ~/Programs/ncbi-blast-2.2.29+/DB_files/"${file%.fastq}.fasta"

  3. mv命令需要在循环外执行。

  4. 事实上,在一次处理单个文件时,您根本不需要使用catUUOC - 无用的猫)。只需提供"$file"作为Perl脚本的参数。