我有下面的bash脚本,我需要采取两个在同一时间。共有8个文件夹中的文件。文件名不连续,如:
file5.txt file7.txt file11.txt file13.txt file14.txt file21.txt file22.txt file23.txt
我的脚本像:
caulatepet.py \
--i file5.txt, file7.txt \
--menscor men-code.list \
--stat sex-rd.ratio \
--out ./result/file5_file7.txt
我需要一次输入两个文件(as --i input)
,比如排列和组合。例如下面的例子:
file5.txt file7.txt
file5.txt file11.txt
file5.txt file13.txt
file5.txt file14.txt
file5.txt file21.txt
file5.txt file22.txt
file5.txt file23.txt
file7.txt file11.txt
file7.txt file13.txt
file7.txt file14.txt
file7.txt file21.txt
file7.txt file22.txt
file7.txt file23.txt
...etc.
我该怎么做?谢谢
4条答案
按热度按时间watbbzwu1#
如果我理解正确的话,您试图成对比较文件,而不是比较文件本身(即不将file5.txt与file5.txt进行比较)并且仅将每一对比较一次(即,在将file5.txt与file7.txt进行比较之后,不需要将file7.txt与file5.txt进行比较)。你应该可以通过将文件名存储在数组中,然后在数组上进行双循环来实现:
顺便说一句,
-i
选项的语法看起来很奇怪;在,
后面真的应该有一个空格吗?juzqafwq2#
在TXR Lisp中的解决方案:
代码:
我们可以删除
echo
来运行程序。注解代码:
@1
语法出现了几次。它指示在隐式函数中应插入参数1的位置。默认情况下,它被插入在右边;例如,对于glob
,我们不需要写(glob @1)
。pb3s4cty3#
由于您已经在使用Python,我建议您编写一个帮助脚本来生成文件名对组合。幸运的是,Python在
itertools
包中有一个内置的combinations
函数:我们称之为
pairs.py
。在上面的脚本中,单元分隔符"\x1F"
被用作字符串,因为它不可打印,因此不太可能出现在文件名中。这样做是为了简单起见。在生产级代码中,应该使用更好的通信格式(如JSON)。现在我们可以生成这些对并将它们通过管道传输到脚本中,如下所示:
请注意,我将这两个文件连接到
--i
选项的单个参数中,因为我认为您的问题中有一个小错误:--i file5.txt,file7.txt
所有流行的shell(包括bash)都将此序列视为三个单独的参数,大多数传统的CLI参数解析器将其解释为带有
file5.txt,
值的--i
选项,而file7.txt
将被解释为单独的参数,这在您的问题中没有意义。h7wcgrx34#
首先将文件添加到数组中:
而不是像这样循环它:
测试结果: