Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/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 - Fatal编程技术网

迭代文件名并根据模式合并,BASH

迭代文件名并根据模式合并,BASH,bash,Bash,我有100个文件成对使用相似的名称模式:这意味着,它们的文件名是“A0-B1.fastq.0.1.82.fastq”和“A0-B2.fastq.0.1.82.fastq”,其中B0和B1表示两个不同的对。文件名中的“82”代表随机数。该目录包含随机数范围为82到100的文件。因此,对于每个随机数,有两对文件(A0-B1和A0-B2)。 我想为每个随机数合并两对 以下是我尝试过的: INPUT=`ls A0-*.0.1.*.fastq` #set values for pair and rand

我有100个文件成对使用相似的名称模式:这意味着,它们的文件名是“A0-B1.fastq.0.1.82.fastq”和“A0-B2.fastq.0.1.82.fastq”,其中B0和B1表示两个不同的对。文件名中的“82”代表随机数。该目录包含随机数范围为82到100的文件。因此,对于每个随机数,有两对文件(A0-B1和A0-B2)。 我想为每个随机数合并两对

以下是我尝试过的:

INPUT=`ls A0-*.0.1.*.fastq`

#set values for pair and random
p=`seq 1 1 2`
r=`seq 82 2 100`

for r in $INPUT;
do
cat A0-${p}.fastq.0.1.${r}.fastq > A0.merged.${r}.fastq
done

要获得正确的输出,我缺少什么???

您可以使用此脚本-

for i in {82..100..2}
do
    if ls A0-*.fastq.0.1.${i}.fastq 1> /dev/null 2>&1; then
        cat A0-*.fastq.0.1.${i}.fastq > A0.merged.${i}.fastq
    fi
done

这应该适合您:

for r in {82..100}; do
  if [[ -f A0-B1.fastq.0.1.${r}.fastq ]] && [[ -f A0-B2.fastq.0.1.${r}.fastq ]]; then
    cat A0-B1.fastq.O.1.${r}.fastq A0-B2.fastq.O.1.${r}.fastq > A0.merged.${r}.fastq
  fi
done

@除非有一个glob,在这种情况下,
test-f
如果扩展多个路径名,可能会失败。尝试
测试-f*
确定。。。实际上,看看OP的脚本,我认为OP有固定的文件名,$p取1和2。因此,不需要glob。但您是对的,
-f
如果用于glob,将失败。