gpt4 book ai didi

linux - While 循环中的并行处理

转载 作者:太空宇宙 更新时间:2023-11-04 05:02:00 24 4
gpt4 key购买 nike

我有一个 .sh 正在从 .txt 中逐行读取,以用作另一个 shell 脚本的参数。每两行并行处理。目前:我当前的代码将读取第一次 .sh 调用的文件中的所有行(一次 2 行),然后读取第二次 .sh 调用的所有行,然后读取最后一次 .sh 调用的所有行

问题:我需要在第一个 .sh 中先写入两行,然后是第二个 .sh,然后是最后一个 .sh..然后循环并处理接下来的两行 HHEEELLLPPP! :)

现在:

cat XXXXX.txt | while read line; do
export step=${line//\"/}
export step=ExecuteModel_${step//,/_}
export pov=$line

$dir"/hpm_ws_client.sh" processCalcScriptOptions "$appName" "$pov" "$layers" "$stages" "" "$stages" "$stages" FALSE > "$dir""/"$step"_ProcessID.log"
$dir_shell_model"/check_process_status.sh" "$dir" "$step" > "$dir""/""$step""_Monitor.log" &


$dir"/hpm_ws_client.sh" processCalcScriptOptions "$appName" "$pov" "$layers" "" "" "$stage_final" "" TRUE > "$dir""/""$step""_ProcessID.log"
$dir"/check_process_status.sh" "$dir" "$step" > "$dir""/""$step""_Monitor.log" &

$dir"/hpm_ws_client.sh" processGenealogyExecutionPaths "$appName" "$pov" "$layers" "$genPath_01" > "$dir""/""$step""_ProcessID.log"
$dir"/check_process_status.sh" "$dir" "$step" > "$dir""/""$step""_Monitor.log" &

if (( ++i % 2 == 0))
then
echo "Waiting..."
wait
fi
done

最佳答案

我看不出您真正想要做什么,但希望这两种语法之一会有所帮助 - 一次读取两行,或者将参数加载到数组中并重新使用它们。

所以,如果您的 file.txt 如下所示:

line 1
line 2
line 3
line 4
line 5
line 6

示例 1 - 两次读取

#!/bin/bash
while read a && read b; do
echo $a, $b
done < file.txt

输出

line 1, line 2
line 3, line 4
line 5, line 6

示例 2 - 使用 bash 数组

#!/bin/bash
declare -a params
while IFS=$'\n' read -r z; do
params+=("${z}")
done < file.txt

# Now print the elements out
for (( i=0;i<${#params[@]};i++ )) do
echo ${params[$i]}
done

输出

line 1
line 2
line 3
line 4
line 5
line 6

示例 3 - 使用 GNU Parallel

或者,正如我在评论中建议的那样,使用 GNU Parallel 像这样

parallel -k -L2 echo {1} {2} < file.txt

输出

line 1 line 2
line 3 line 4
line 5 line 6

其中 -k 表示“保持输出按顺序排列”,-L2 表示“一次从 file.txt 中获取 2 行”。

这样做的好处是,如果您想同时并行运行 8 个脚本,只需将 -j 8 指定为 parallel 即可完成工作。

关于linux - While 循环中的并行处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29950596/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com