Bash 传递不在循环第 i 个元素中的文件名

标签 bash for-loop

在简单的文件处理中,您想要对目录中的每个文件执行某些操作,可以执行如下操作:

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/

相关文章:

Bash while 循环在远程运行与本地运行时的行为不同

regex - grep/egrep 星号运算符不匹配所有出现的情况

list - python 中 if 的单行代码——为什么结果总是列表中的最后一项?

python - 如何用for循环影响列表的显示?

visual-studio - 可以使用 ReSharper 将 'foreach' 转换为 'for' 循环,反之亦然?

arrays - Bash中具有前置或 append 值的Readarray

linux - bash 脚本将输出分配给变量失败

python - 如何用递归替换嵌套的 for 循环?

javascript - 如何仅在单击时将字母颜色更改为白色

linux - 如何在 bash 脚本中传递两个参数或参数