遍历shell脚本中同一目录下的所有文件
我在一个目录中有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
简单for
循环应该工作:
for f in *.fastq.gz; do
file="${f%%.*}"
zcat "$f" | paste - - - - | awk '{print ">"$1"\n"$3}' > "$file.fa"
done
15秒太晚了:D –
@ user7249622:这是否适合您? – anubhava
#!/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
将文件名拆分为第一个.
,并将其作为第一部分。
[你不应该用ls解析文件](http://mywiki.wooledge.org/ParsingLs) – Aserre
修复它谢谢。 –
@TobySpeight谢谢,更新了答案。 –
这应该做他们都在与GNU水货:
#!/bin/bash
doit(){
zcat $1 | paste - - - - | awk '{print ">"$1"\n"$3}' > $2
}
export -f doit
parallel doit {} {\.} ::: bs*fastq.gz
没有我的答案,或者任何其他人,理清问题了吗?如果是这样,请考虑接受它作为您的答案 - 通过点击投票计数旁边的空心绿色勾号/复选标记。如果没有,请说出什么不起作用,以便我或其他人可以进一步帮助您。谢谢。 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235 –