我有以下问题;包含以下内容的两个目录:
file1.fq file2.fq file3.fq
依旧......
file1.fq.sa file2.fq.sa file3.fq.sa
我要做的是运行一起使用file1.fq和file1.fq.sa的命令。
我尝试过以下循环:
fq=dir1/*
sa=dir2/*
for fqfiles in $fq;
do
for sa_files in $sa;
do
mycommand ${sa_files} ${fqfiles} > ${sa_files}.cc &
done
done
问题是我的循环执行以下操作:
mycommand file1.fq.sa file1.fq > file1.fq.sa.cc #correct
但也
mycommand file1.fq.sa file2.fq > file1.fq.sa.cc #wrong!
依旧......几乎无限循环!
我希望我的循环可以产生类似的东西:
mycommand file1.fq.sa file1.fq > file1.fq.sa.cc
mycommand file2.fq.sa file2.fq > file2.fq.sa.cc
mycommand file3.fq.sa file3.fq > file3.fq.sa.cc
等...
你能帮我吗?
谢谢!
的Fabio
答案 0 :(得分:1)
您可以循环dir1
,对文件使用basename
,然后使用dir2
作为前缀,并附加您需要的扩展名。您可能还希望检查第二个目录中的文件,并仅在两个文件都可用时运行命令
for f in dir1/*.fq; do
b=$(basename "$f")
f2=dir2/"$b".sa
if test -f "$f2"; then
mycommand "$f2" "$f" >"$b".sa.cc
fi
done
如果您不想要目录部分,请改用
mycommand "$b".sa "$b" >"$b".sa.cc