这个bash脚本应该执行以下操作:
1)从文件susc
中读入两个值exp_trans
和postprocessing.txt
2)将这两个值作为命令行输入传递给Python程序postproc.py
3)将postproc.py
的结果保存为varval
。这是三个值的列表。
4)创建一个包含标题M1, M2, M3
的文件,并在每个文件下写下varval
个值。
沿途有一些cd
,但我没有达到我的期望。这就是我的期望:
M1 M2 M3
[[4.0], [2.2799999999999998], [0.56000000000000005]]
[[5.3], [2.1111111111111111], [0.59111111111111111]]
这是我得到的:
[[4.0], [2.2799999999999998], [0.56000000000000005]]
M1,M2,M3
[[4.0], [2.2799999999999998], [0.56000000000000005]]
./postproc.sh: line 6: [[4.0], [2.2799999999999998], [0.56000000000000005]]+1: syntax error: operand expected (error token is "[[4.0], [2.2799999999999998], [0.56000000000000005]]+1"
显然,我在迭代的方式出了问题,因为我只从postproc.py
得到一个结果,而不是两个。我认为错误在于这一行:varval=$(python ../postproc.py --susc $a1 --exp_trans $b1 2>&1)
有没有人知道如何在循环中以bash方式保存结果,然后将它们写入文件?
我的bash代码:
#/bin/bash
i=0
while read a1 b1
do
i=$(($i+1))
cd RUN_EXP$i
varval=$(python ../postproc.py --susc $a1 --exp_trans $b1 2>&1)
echo $varval
cd ..
echo M1,M2,M3
for i in "${varval[@]}"
do
echo $i
done
done < postprocessing.txt
编辑
这不仅仅是i
被覆盖了(不过很好,谢谢!)。根据下面的Veselin Ivanov和micebrain的答案确定后,输出仍然不太正确。
到目前为止的代码:
#/bin/bash
i=0
echo M1,M2,M3
while read a1 b1
do
i=$(($i+1))
cd RUN_EXP$i
varval=$(python ../postproc.py --susc $a1 --exp_trans $b1 2>&1)
echo $varval
cd ..
for j in "${varval[@]}"
do
echo $j
done
done < postprocessing.txt
输出:
M1,M2,M3
[[4.0], [2.2799999999999998], [0.56000000000000005]]
[[4.0], [2.2799999999999998], [0.56000000000000005]]
[[5.3], [2.1111111111111111], [0.59111111111111111]]
[[5.3], [2.1111111111111111], [0.59111111111111111]]
答案 0 :(得分:0)
看起来你通过在for循环中重用它来覆盖变量i。标题的echo也应该在while循环之前。
答案 1 :(得分:0)
你的问题是你再次使用变量 i ,而在第二次运行时,它的字符串不是整数。只需用j重命名它,例如:
#/bin/bash
i=0
echo M1,M2,M3
while read a1 b1
do
i=$(($i+1))
cd RUN_EXP$i
varval=$(python ../postproc.py --susc $a1 --exp_trans $b1 2>&1)
field1=$(echo $varval|cut -d ',' -f1)
field2=$(echo $varval|cut -d ',' -f2)
field3=$(echo $varval|cut -d ',' -f3)
values=($field1,$field2,$field3)
cd ..
echo M1,M2,M3
for j in "${values[@]}"
do
echo $j
done
done < postprocessing.txt
编辑:
如果你想用一个数组来做它并在一个单独的行中打印每个条目(我假设你想这样做),那么这是一种方法。
proxy.setHttpProxy("hostname:port");
proxy.setFtpProxy("hostname:port");
proxy.setSslProxy("hostname:port");
//proxy.setSocksUsername("username");
//proxy.setSocksPassword("password");
proxy.setAutodetect(false);
proxy.setProxyType(ProxyType.MANUAL);
capabilities.setCapability(CapabilityType.PROXY, proxy);