Linux Shell脚本实现8个不连续文件的两两组合输入
实现无重复两两文件组合调用caulatepet.py的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时,输出文件名为./result/file5_file7.txt)。现有调用示例如下:
caulatepet.py \ --i file5.txt, file7.txt \ --menscor men-code.list \ --stat sex-rd.ratio \ --out ./result/file5_file7.txt
实现方案
可以通过bash嵌套循环结合数组实现,核心是通过索引控制避免重复组合,具体脚本如下:
# 定义待处理文件数组 files=(file5.txt file7.txt file11.txt file13.txt file14.txt file21.txt file22.txt file23.txt) # 确保输出目录存在 mkdir -p ./result # 遍历所有无重复两两组合 for ((i=0; i<${#files[@]}; i++)); do for ((j=i+1; j<${#files[@]}; j++)); do file1=${files[$i]} file2=${files[$j]} # 生成符合要求的输出文件名 out_filename="./result/$(basename "$file1" .txt)_$(basename "$file2" .txt).txt" # 调用工具 caulatepet.py \ --i "$file1,$file2" \ --menscor men-code.list \ --stat sex-rd.ratio \ --out "$out_filename" done done
关键细节说明
- 避免重复组合:内层循环从
i+1开始,确保每个文件对只被处理一次(比如不会同时处理file5+file7和file7+file5)。 - 输出目录预处理:
mkdir -p命令会自动创建不存在的目录,防止输出时因目录缺失报错。 - 文件名处理:用
basename移除.txt后缀,再拼接成指定格式的输出文件名,保证命名一致性。 - 参数格式:
--i参数中两个文件名直接用逗号连接,不添加空格,避免工具解析参数时出现异常。
内容的提问来源于stack exchange,提问作者mashimena
相关产品推荐
相关产品推荐

