Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash:对于循环,两个变量链接_Bash_Variables_Loops_For Loop - Fatal编程技术网

bash:对于循环,两个变量链接

bash:对于循环,两个变量链接,bash,variables,loops,for-loop,Bash,Variables,Loops,For Loop,我有以下问题;包含以下内容的两个目录: dir1:类似以下内容的文件列表: file1.fq file2.fq file3.fq 等等 dir2:类似以下内容的文件列表: 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 mycom

我有以下问题;包含以下内容的两个目录:

  • dir1:类似以下内容的文件列表:
file1.fq file2.fq file3.fq

等等

  • dir2:类似以下内容的文件列表:
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

您可以循环使用
dir1
,在文件上使用,然后以
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

您可以循环使用
dir1
,在文件上使用,然后以
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

伟大的它起作用了!非常感谢。我将详细研究basename选项!伟大的它起作用了!非常感谢。我将详细研究basename选项!