You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Linux Shell中并行执行命令块并按序将输出写入文件

实现方案

核心思路是给输入文件的每一行分配唯一序号,并行执行命令块时将输出写入对应序号的临时文件,所有任务执行完成后按序号拼接临时文件到最终输出文件,即可保证输出顺序与输入行顺序完全一致。

完整原生Shell实现(无需额外依赖)

#!/bin/bash
INPUT_FILE="file.txt"
OUTPUT_FILE="output.txt"
# 创建唯一临时目录避免文件冲突
TMP_DIR=$(mktemp -d /tmp/parallel_exec.XXXXXX)

# 清空目标输出文件
> "$OUTPUT_FILE"

line_num=0
# 遍历输入文件每一行,兼容空格、特殊字符和末尾无换行的场景
while IFS= read -r line || [[ -n "$line" ]]; do
    line_num=$((line_num + 1))
    # 后台启动子进程执行命令块,输出写入对应行号的临时文件
    (
        # 替换为你实际要执行的命令,$line为当前读取的行内容
        Execute A "$line"
        Execute B "$line"
        Execute C "$line" > "$TMP_DIR/${line_num}.out"
    ) &
done < "$INPUT_FILE"

# 等待所有后台任务全部执行完成
wait

# 按行号顺序拼接所有临时输出到最终文件
for ((i=1; i<=line_num; i++)); do
    cat "$TMP_DIR/${i}.out" >> "$OUTPUT_FILE"
done

# 清理临时目录
rm -rf "$TMP_DIR"

简化方案(需安装GNU Parallel)

如果你的系统已安装parallel包,可以直接用内置的顺序输出参数,无需手动管理临时文件:

parallel --keep-order 'Execute A {}; Execute B {}; Execute C {}' :::: file.txt > output.txt

其中--keep-order参数会强制输出顺序和输入顺序完全一致,自动处理并行调度和输出排序逻辑。


内容的提问来源于stack exchange,提问作者user3595106

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 15:45:08