【问题标题】:Reading files in nested loop in bash shell [closed]在bash shell的嵌套循环中读取文件[关闭]
【发布时间】:2016-09-06 00:18:19
【问题描述】:

我有一组文件。

file1, file2, file3

我需要使用嵌套的 for 循环在 bash 脚本中成对读取它们。

file1, file2
file1, file3
file2, file3

我该怎么做?

【问题讨论】:

  • 我可以读取目录中的所有文件。 for i in $(ls) do for j in ... 在第二个 for 循环中完成 我需要读取除 $i 之外的文件。
  • 也许你应该更清楚你拥有的文件,只有3个文件吗?还是每个文件最多读取两次或更多?目前尚不清楚您到底想要什么。例如,是否有一个file4,它也应该是“file1,file4”。
  • 是的,我总共有 98 个文件。

标签: bash shell for-loop


【解决方案1】:

遍历目录中两个文件的所有组合:

flist=(*)
for i in "${!flist[@]}"
do
   file1="${flist[i]}"
   for file2 in "${flist[@]:i+1}"
   do
      echo "Files: $file1 $file2"
   done
done

flist=(*) 创建一个数组,其中包含当前目录中所有文件的名称。

for i in "${!flist[@]}"; do 在数组flist 的索引上开始循环。

file1="${flist[i]}"flast 中第 i 个文件的名称分配给变量file1

for file2 in "${flist[@]:i+1}"; do 开始循环遍历flist 中的所有文件名,开始第 i+1 个文件。

示例

考虑一个包含三个文件的目录:

$ ls
file1  file2  file3

现在,让我们运行我们的命令:

$ flist=(*); for i in "${!flist[@]}"; do file1="${flist[i]}"; for file2 in "${flist[@]:i+1}"; do echo "Files: $file1 $file2"; done; done
Files: file1 file2
Files: file1 file3
Files: file2 file3

【讨论】:

  • @Chepner 感谢您纠正这个错字!
猜你喜欢
  • 2019-03-20
  • 1970-01-01
  • 1970-01-01
  • 2012-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多