2017-03-02 142 views
-1

我在一个目录中有5个文件(.fastq.gz),并且希望将它们转换为.fa文件。遍历shell脚本中同一目录下的所有文件

这样做,我用下面的命令分别为每个文件:

zcat bs1.fastq.gz | paste - - - - | awk '{print ">"$1"\n"$3}' > bs1.fa 

我怎么能在同一时间执行所有文件相同的命令?其实我的文件有:

bs1.fastq.gz 
bs2.fastq.gz 
bs3.fastq.gz 
bs4.fastq.gz 
bs5.fastq.gz 

,我想:

bs1.fa 
bs2.fa 
bs3.fa 
bs4.fa 
bs5.fa 
+0

没有我的答案,或者任何其他人,理清问题了吗?如果是这样,请考虑接受它作为您的答案 - 通过点击投票计数旁边的空心绿色勾号/复选标记。如果没有,请说出什么不起作用,以便我或其他人可以进一步帮助您。谢谢。 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235 –

回答

1

简单for循环应该工作:

for f in *.fastq.gz; do 
    file="${f%%.*}" 
    zcat "$f" | paste - - - - | awk '{print ">"$1"\n"$3}' > "$file.fa" 
done 
+1

15秒太晚了:D –

+0

@ user7249622:这是否适合您? – anubhava

0
#!/bin/bash 

for file in *.fastq.gz 
do 
    name=`echo "$file" | cut -d'.' -f1` 
    zcat $file | paste - - - - | awk '{print ">"$1"\n"$3}' > ${name}.fa 
done 

*.fastq.gz将在当前目录中获取文件anything.fastq.gz

echo "$file" | cut -d'.' -f1将文件名拆分为第一个.,并将其作为第一部分。

+1

[你不应该用ls解析文件](http://mywiki.wooledge.org/ParsingLs) – Aserre

+0

修复它谢谢。 –

+0

@TobySpeight谢谢,更新了答案。 –

0

这应该做他们都在与GNU水货

#!/bin/bash 
doit(){ 
    zcat $1 | paste - - - - | awk '{print ">"$1"\n"$3}' > $2 
} 
export -f doit 
parallel doit {} {\.} ::: bs*fastq.gz 
相关问题