在简单的文件处理中,您想要对目录中的每个文件执行某些操作,可以执行如下操作:
for i in file1 file2 file3 file5
do
echo "Processing $i"
done
我想要在这里做的是将 $i 以及非 $i 文件作为参数传递给命令。假设我的目录包含 4 个文件(file1、file2、file3、file5)。例如,在循环的第一次迭代中,当处理 file1 时,我想将其余文件(file2、file3、file5)传递给命令的 -b 参数。
例如,bash 中的循环的第一次迭代应如下所示:
FILES=/path/to/directory
for i in $FILES
do
bedtools intersect -a $i -b file2 file3 file5
done
在第二次迭代中,由于 file2 位于 $i 中,其余文件将传递给 -b
参数。
for i in $FILES
do
bedtools intersect -a $i -b file1 file3 file5
done
对于目录中的所有文件,依此类推。简而言之,将当前文件传递给 -a
参数,并将其余文件传递给 -b
参数。
如果有人能帮助我解决这个问题,那就太好了。谢谢。
最佳答案
您可以只使用数字循环并从数组中取出切片:
shopt -s nullglob
files=( path/to/directory/* )
for (( i = 0; i < ${#files[@]}; ++i )); do
file=${files[i]}
others=( "${files[@]:0:i}" "${files[@]:i+1}" )
bedtools intersect -a "$file" -b "${others[@]}"
done
此循环遍历数组 files
的索引,并对当前索引 i
之前和之后的部分进行切片,以获取其他
。
关于Bash 传递不在循环第 i 个元素中的文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48007339/