我试图使这个非常简单的bash程序必须执行以下操作:
1)修改文件n次:每次我必须在文件的一行中更改一个单词(行为11)时,我知道下面的命令可以用另一个命令替换程序特定行中的一个单词:
sed -i "11s/1/$n/" IC_masslessPlanetesimal.java如果我执行上面的命令,我只能修改file.java一次,因为在for循环的第二次迭代中,我的单词与第一次迭代中的单词不一样:我从第11行中的1开始,而在第一次迭代中我用$n (即等于2)进行修改,但是现在可以如何修改sed命令以再次更改单词(现在等于2),例如,在第11行中有3吗?
2)编译文件java:可以;
3)修改file.txt:与1)相同的问题是,我想用for循环或类似的方法迭代地修改一行中的单词;
4)将其传递给可执行文件:这是第二个问题。我已经修改了param.txt文件,现在我想将它读入一个名为exec的可执行文件。如果我从终端机做这件事,我必须启动主管。使用命令./exec进行编程,之后我必须从屏幕上编写file.txt名称。现在是否有可能从bash启动一个程序,并使用它读取file.txt?我试着:
sed -i "13s/Zero/$n/" param.txt
./exec < param.txt 该脚本必须将第13行从Zero更改为$n in param.txt ,如何使用带有特定param.txt文件的命令./exec启动exec程序。
#!/bin/bash
n=0
for n in "2" "3"
do
sed -i "11s/1/$n/" IC_masslessPlanetesimal.java
javac IC_masslessPlanetesimal.java
java IC_masslessPlanetesimal
sed -i "13s/Zero/$n/" param.txt
./exec < param.txt
done非常感谢!
发布于 2014-01-04 05:16:02
使用变量来跟踪以前的n值。它将涵盖前3点。
#!/bin/bash
n=0
prev=1
for n in "2" "3"
do
sed -i "11s/$prev/$n/" IC_masslessPlanetesimal.java
javac IC_masslessPlanetesimal.java
java IC_masslessPlanetesimal
sed -i "13s/Zero/$prev/" param.txt
echo "param.txt" | ./exec
prev=$n
done发布于 2014-01-04 17:24:59
我用一种非常简单(但不是很正式)的方式解决这个问题:
我转到file.f90并重新定义它,以便将文件编译时必须读取的shell命令更改为file.txt。
现在,bash非常简单:
#!/bin/bash
touch IC_masslessPlanetesimal.java
touch param.in
m=1
n=0
for n in "2" "3"
do
sed -i "11s/$m/$n/" IC_masslessPlanetesimal.java
javac IC_masslessPlanetesimal.java
java IC_masslessPlanetesimal
sed -i "13s/$m/$n/" param.in
./swifter_symba_omp # now i just launch the modify version of ./exec that read the files in which i declare the input to the ./exec
m=$n
done非常感谢你的回答,评论和建议。
https://stackoverflow.com/questions/20916938
复制相似问题