2012-07-18 88 views
2

我有一个bash脚本,用于处理计算群集上的文件。为什么不使用sed命令?

我试图操纵的文件格式:

beadSize=6.25 
minBoxSize=2.2 
lipids=1200 
chargedLipids=60 
cations=0 
HEAD=0 
CHEAD=-2 
BODY=2 
TAIL=3 
ION=-1 
RHO_BODY=10 
RHO_TAIL=14 
tol=1e-10 
lb=7.1 
FTsize=8 
ROUNDS=1000000 
ftROUNDS=10 
wROUNDS=1000 
dt=0.01 
alpha=1 
transSize=0.15 
transSizeZ=0.0 
ionsTransSize=2.8 
ionsTransSizeZ=2.8 
rotateSize=0.18 
volSize=8 
modSize=0.0 
forceFactor=2 
kappaCV=0 
sysSize=26 
zSize=300 
iVal=1 
split=0 
randSeed=580 

我叫一个循环内的函数:

for per in $(seq 70 -5 5); do 
    for seed in {580..583}; do 
     for c in {"fs","fd","bfs","bfd"}; do 
      let count=$count+1 
      startJob $per $seed $c $count 
     done 
    done 
done 

和线我用它来操作:

let n=$1*12 
    echo $n 
    cat trm.dat | sed '/memFile*/d' | sed '/rStart*/d' | sed '/test*/d'| sed 's/modSize=[0-9.]*/modSize=0.0/' | sed 's/chachargedLipids=[0-9]*/chargedLipids="$n"/' | grep char #> propFile.dat 

对于$per=15,例如,我预计$n==180。然而,当我运行我看到的脚本:

180 
chargedLipids=120 

我在做什么错?

我也曾尝试使用:

sed "s/chachargedLipids=[0-9]*/chargedLipids=$n/" 

具有相同的结果。

+1

命令行以...评论结尾。你必须引用“#”:'... | grep char \#'。你真的有一个名为'#'的文件吗?这不应该只是'grep -v \#'什么的? – fork0 2012-07-18 11:47:43

+0

我认为你应该删除这个问题,这有点复杂,其中大部分与sed无关 – perreal 2012-07-18 11:51:11

回答

3

chacharged!= charged,最后的sed什么都不做。使用单引号,如果正在进行替换,则希望在输出中看到文字chargedLipids="$n"