bash - 如何通过 bash/shell 读取组合列表?

标签 bash shell loops combinations

我有一个 A_1 文件夹、一个 A_2 文件夹、一个 A_3 文件夹......直到 A_561> 文件夹。

每个文件夹都有一个子目录,其中包含 B_1B_2B_3... 和 B_34 文件夹。

B_1文件夹中,有名为F_1_1.txtF_1_2.txt...F_1_38.txtF_2_1.txtF_2_1.txt...F_2_38.txt

B_2文件夹中,有名为F_1_1.txtF_1_2.txt...F_1_38.txtF_2_1.txtF_2_1.txt...F_2_38.txt

B_2文件夹中,有名为F_1_1.txtF_1_2.txt...F_1_38.txtF_2_1.txtF_2_1.txt...F_2_38.txt

然后我将运行一个java程序来处理这些文件:

java -jar beagle.28Sep18.793.jar  \
gt=/A_1/B_1/F_1_1.txt /A_1/B_1/F_2_1 out=/C/test_1.out;.....     

java -jar beagle.28Sep18.793.jar  \
gt=/A_1/B_2/F_1_2.txt /A_1/B_2/F_3_2 out=/C/test_2.out;.....    

java -jar beagle.28Sep18.793.jar  \
gt=/A_2/B_3/F_3_1.txt /A_2/B_3/F_4_1 out=/C/test_3.out;    

java -jar beagle.28Sep18.793.jar  \
gt=/A_3/B_1/F_1_38.txt /A_3/B_1/F_1_38 out=/C/test_4.out;  

我可以运行 for 循环 bash 来读取文件

for folder in $(seq 561); do 
    for file in $(seq 1 34); do 
        for sample in $(seq 1 38); do   
java -jar beagle.28Sep18.793.jar gt=/A_"$folder"/B_"$file"/F_"$file"_"sample".txt /A_"$folder"/B_"$file"/F_"$file"_"sample" out=/C/test_"file"_"$sample".out  
        done  
     done  
done  

该命令运行速度可能非常慢。我知道有些文件没有退出,但 java 将跳过它并下一步运行。我想知道对于这种情况,如何编写命令来正确读取文件。

最佳答案

我不确定是否正确理解了您的问题,因为它的格式很差,但我认为您想在文件夹层次结构中的每个文本文件上运行 Java 程序。我认为您可以使用 GNU Parallel 并行地相对轻松快速地做到这一点。

以下是如何使用 find 生成文本文件列表:

find . -name \*.txt -print

如果看起来正确,您可以再次运行相同的代码,但以 null 终止每个名称并将其传递到 GNU Parallel 中,如下所示:

find . -name \*.txt -print0 | parallel -0

现在您想要为每个文件运行一个 Java 程序,并为输出文件使用递增的数字,这样我们就可以进行一次试运行,它只打印它将执行的操作,而不实际执行任何操作,如下所示:

find . -name \*.txt -print0 | parallel -0 --dry-run java -jar beagle.28Sep18.793.jar gt={} out=/C/test_{#}.out

如果看起来正确,请删除 --dry-run 并再次运行它,它将并行运行与您拥有的 CPU 内核一样多的 Java 实例,并使它们全部忙碌,直到作业完成完成了。

关于bash - 如何通过 bash/shell 读取组合列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56505072/

相关文章:

bash - VSCode : Code Runner extension is unable to execute the code on git bash terminal?

linux - 如何让while循环等待用户输入?

linux - 如何在linux命令中替换多个文件中的字符串

bash - 这里文档作为 bash 函数的参数

linux - 如何直接访问 ash 中函数的最后一个参数?

bash - 有没有一种简单的方法可以用 bash 计算分位数?

bash - 为什么函数 ls { ls;卡在那里?

Php:数组嵌套循环性能

javascript - 在数组原型(prototype)中循环

c# - 循环出 string[] 值的最简单方法是什么?