bash用浮动变量替换字符串

时间:2015-04-28 14:57:19

标签: bash awk sed floating

我试图用bash文件中的计算浮动变量替换文件中的数字。所以我试图用“km”的值替换1.1111并将其保存在mesh.in文件中。我一直在sed线上出错,我认为浮动变量可能存在问题。 Echo“$ km”确实有效,所以我知道km不是问题

#!/bin/bash
read -p "Angle in degrees : " n1
read -p "bcsa : " n2
cd viv_example_se2d
sed s/^bcsa.\*/"bcsa $n2"/ runfile.viv >temp
mv -f temp runfile.viv
cd ../
for i in $(seq 2 0.5 12)
do
    if  [ ! -d U*_$i ];then
        mkdir U*_$i
    fi
    printf -v "km" "%.4f\n" $(echo | bc | awk "BEGIN {print 4*3.14159265359*3.14159265359/($i*$i)}")
    echo "$km"
    cd viv_example_se2d
    sed s/1.1111/$km/g mesh_master.in > temp$i 

    mv -f temp$i mesh.in
    cd ../
    echo $home/lustre/projects/p057_swin/ogoldman/Ellipse_$n1/U*_$i | xargs -n 1 cp viv_example_se2d/*
done;

1 个答案:

答案 0 :(得分:1)

问题是$km值的换行符。这令人困惑sed

据说这个剧本也有点混乱。

当您使用变量时,应引用变量以防止值中的空格和全局字符出现问题。

您不需要xargscp多个可以通过glob扩展的文件。 cp很乐意直接复制多个文件。 (哦,还是将多个文件复制到通过该glob生成的目录?)

echo | bc |命令附近有一个无用的awk位。

使用sed / etc中的完整/相对路径。总体上比{{1}更好。