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

如何用Bash脚本自动迭代运行模拟并处理ROOT生成的TXT结果?

解决Bash脚本自动化模拟的结果保存与数值读取问题

一、完善模拟结果的保存逻辑

你现有代码已经创建了对应参数的输出目录,但缺少将模拟生成的结果文件移动/复制到该目录的步骤。假设你的$TARGET_SCRIPT运行后会生成固定名称的结果文件(比如sim_output.txt、root_result.txt),可以在创建目录后添加复制/移动命令:

ENERGY_FILE="/my_path/energy_values.txt"
# 假设模拟脚本生成的结果文件名为sim_result.txt,根据实际情况修改
RESULT_FILE="sim_result.txt"

while IFS= read -r ENERGY
do
    for INPUT in {500..10000..1000}
    do
        echo "Executing $TARGET_SCRIPT with Energy: $ENERGY and Input: $INPUT"
        bash "$TARGET_SCRIPT" "$ENERGY" "$INPUT"
        
        dir_name="output_${INPUT}_${ENERGY}"
        mkdir -p "$dir_name" 
        # 将结果文件移动到对应目录,若要保留原文件用cp代替mv
        if [ -f "$RESULT_FILE" ]; then
            mv "$RESULT_FILE" "$dir_name/"
            echo "Result saved to $dir_name/$RESULT_FILE"
        else
            echo "Warning: Result file $RESULT_FILE not found"
        fi
    done
done < "$ENERGY_FILE"

如果模拟脚本生成多个结果文件,可以用通配符匹配(比如*.txt、*.root),但注意避免误移动其他无关文件:

mv *.txt "$dir_name/"

二、读取ROOT生成的TXT文件数值

ROOT输出的TXT文件通常有两种常见格式,对应不同的读取方式:

1. 键值对格式(比如Mean: 123.45)

如果文件内容类似:

Energy: 1000
Input: 500
Mean Value: 456.78
RMS: 23.45

可以用grep定位目标行,再用awk提取数值:

# 从指定目录的结果文件中读取Mean Value
mean_value=$(grep "Mean Value" "$dir_name/$RESULT_FILE" | awk '{print $3}')
# 读取RMS
rms_value=$(grep "RMS" "$dir_name/$RESULT_FILE" | awk '{print $2}')

# 可以将提取的数值保存到汇总文件
echo "$ENERGY $INPUT $mean_value $rms_value" >> simulation_summary.txt

2. 纯数值或固定列格式

如果文件是每行一个数值,或者按列排列的表格:

1000 500 456.78 23.45

直接用awk提取对应列:

# 提取第3列的Mean值,第4列的RMS值
read mean_value rms_value <<< $(awk '{print $3, $4}' "$dir_name/$RESULT_FILE")

3. 复杂格式的处理

如果ROOT输出的是更复杂的格式(比如带表头的表格),可以结合sed先过滤无关行,再用awk提取:

# 跳过前2行表头,提取第3行第2列的数值
target_value=$(sed -n '3p' "$dir_name/$RESULT_FILE" | awk '{print $2}')

三、额外优化建议

  • 为避免循环中出现错误导致后续任务中断,可以在运行模拟脚本时添加错误判断:
if bash "$TARGET_SCRIPT" "$ENERGY" "$INPUT"; then
    # 模拟成功才执行结果保存
    mkdir -p "$dir_name"
    mv "$RESULT_FILE" "$dir_name/"
else
    echo "Error: $TARGET_SCRIPT failed with Energy: $ENERGY, Input: $INPUT" >> error_log.txt
fi
  • 如果$TARGET_SCRIPT运行时间较长,可以添加后台运行(但要注意资源占用),或者用parallel工具并行处理,提升效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 13:03:17