Bash循环可对相同数据进行多变量处理

时间:2018-06-26 14:31:07

标签: bash shell sh

我正在尝试使用bash循环使用多个变量来创建模型。对于相同的数据,我需要使用不同的r2和p值截止值来运行多个预测。 r2和value参数是  cat parameters

0.2 1
0.2 5e-1
0.2 5e-2
0.2 5e-4
0.2 5e-6
0.2 5e-8
0.4 1
0.4 5e-1
0.4 5e-2
0.4 5e-4
0.4 5e-6
0.4 5e-8
0.6 1
0.6 5e-1
0.6 5e-2
0.6 5e-4
0.6 5e-6
0.6 5e-8
0.8 1
0.8 5e-1
0.8 5e-2
0.8 5e-4
0.8 5e-6
0.8 5e-8

我正在使用test.sh

的bash循环脚本
RSQ=$(cat parameters | awk '{print $1}')
PVAL=$(cat parameters | awk '{print $2}')
season=("spring summer fall winter")
for i in $season;
do
echo prediction_${i}_${RSQ}_${PVAL}
done

当前输出是

prediction_spring_0.2 0.2 0.2 0.2 0.2 0.2 0.4 0.4 0.4 0.4 0.4 0.4 0.6 0.6 0.6 0.6 0.6 0.6 0.8 0.8 0.8 0.8 0.8 0.8_1 5e-1 5e-2 5e-4 5e-6 5e-8 1 5e-1 5e-2 5e-4 5e-6 5e-8 1 5e-1 5e-2 5e-4 5e-6 5e-8 1 5e-1 5e-2 5e-4 5e-6 5e-8
prediction_summer_0.2 0.2 0.2 0.2 0.2 0.2 0.4 0.4 0.4 0.4 0.4 0.4 0.6 0.6 0.6 0.6 0.6 0.6 0.8 0.8 0.8 0.8 0.8 0.8_1 5e-1 5e-2 5e-4 5e-6 5e-8 1 5e-1 5e-2 5e-4 5e-6 5e-8 1 5e-1 5e-2 5e-4 5e-6 5e-8 1 5e-1 5e-2 5e-4 5e-6 5e-8
prediction_fall_0.2 0.2 0.2 0.2 0.2 0.2 0.4 0.4 0.4 0.4 0.4 0.4 0.6 0.6 0.6 0.6 0.6 0.6 0.8 0.8 0.8 0.8 0.8 0.8_1 5e-1 5e-2 5e-4 5e-6 5e-8 1 5e-1 5e-2 5e-4 5e-6 5e-8 1 5e-1 5e-2 5e-4 5e-6 5e-8 1 5e-1 5e-2 5e-4 5e-6 5e-8
prediction_winter_0.2 0.2 0.2 0.2 0.2 0.2 0.4 0.4 0.4 0.4 0.4 0.4 0.6 0.6 0.6 0.6 0.6 0.6 0.8 0.8 0.8 0.8 0.8 0.8_1 5e-1 5e-2 5e-4 5e-6 5e-8 1 5e-1 5e-2 5e-4 5e-6 5e-8 1 5e-1 5e-2 5e-4 5e-6 5e-8 1 5e-1 5e-2 5e-4 5e-6 5e-8

所需的输出是

prediction_spring_0.2_1
prediction_spring_0.2_5e-1
prediction_spring_0.2_5e-2
prediction_spring_0.2_5e-4
prediction_spring_0.2_5e-6
prediction_spring_0.2_5e-8
prediction_spring_0.4_1
.......
prediction_winter_0.2_1
prediction_winter_0.2_5e-1
prediction_winter_0.2_5e-2
prediction_winter_0.2_5e-4
prediction_winter_0.2_5e-6
prediction_winter_0.2_5e-8
prediction_winter_0.4_1
..........

1 个答案:

答案 0 :(得分:1)

您的样本输出不够完整。我可以想象两种解决方案:1)您打算将每个季节与每个RSQ值配对,并将每个PVAL值配对;或者,2)您希望指定的R / P对与季节匹配。

第一种解决方案:您需要遍历R&P列表

for i in $season; do
    for r in $RSQ; do
        for p in $PVAL; do
            echo prediction_${i}_${r}_${p}
        done
    done
done

第二种解决方案:逐行读取文件

for i in $season; do
    while read r p; do
        echo prediction_${i}_${r}_${p}
    done < parameters
done