2

这对我来说是一个真正的问题。

我有一个原始输入文件如下。

R shthk     0.900000                                                            
R mue       0.054100                                                            
R nue       0.121400                                                            
R oue       0.137700                                                            
R ystress  150.23000 

我有一个名为 Friction1.k 的文件,其值为 0.123200

我想在模拟期间将mue的值更改为该文件中给出的值。

我使用以下 sed 脚本。

sed '/\<mue\>/!d;=;s/.* \([^ ]\+\).*/\1/;R Friction1.k' dynaRcoupledmodel.k |
sed 'N;N;s|\n|s/|;s|\n|/|;s|$|/|;q' >temp.sed
sed -i -f temp.sed dynaRcoupledmodel.k

所以它变为

R shthk     0.900000                                                            
R mue       0.123200148                                                            
R nue       0.121400                                                            
R oue       0.137700                                                            
R ystress  150.23000   

该软件对其格式非常严格,因此当我使用此命令时,148 或 155 或 159 会额外出现,并且我收到 *PARAMETER 试图更改内在 TIME 的错误。

早些时候它对我来说很好,但现在这给出了错误。

我检查了 temp.sed 并且那个数字也在那里但是如何避免它?

我不知道为什么这个数字会额外出现,它来自哪里,但这对我来说是个问题。任何专家可以帮助我吗?

此致

4

2 回答 2

1

这可能对您有用(GNU sed):

cat Friction1.k
0.123200
cat dynaRcoupledmodel.k
R shthk     0.900000                                                            
R mue       0.054100                                                            
R nue       0.121400                                                            
R oue       0.137700                                                            
R ystress  150.23000 
 sed '1{h;d};/\<mue\>/!b;G;s/\S*\(\s*\)\n\(.*\)/\2\1/' Friction1.k dynaRcouplemodel.k
R shthk     0.900000                                                            
R mue       0.123200                                                            
R nue       0.121400                                                            
R oue       0.137700                                                            
R ystress  150.23000 
于 2012-06-06T14:28:17.797 回答
0

为什么要使用 sed,您可以像这样在单个 awk 行中完成所有这些操作:

awk -v DATA=$(<Friction1.k) '($2=="mue"){$3="      " DATA}1' dynaRcoupledmodel.k

或者

awk -v DATA=$(<Friction1.k) '($2=="mue"){$3=sprintf("%14s",DATA)}1' dynaRcoupledmodel.k

或者更好,因为它保留了空格

awk -v DATA=$(<Friction1.k) '($2=="mue"){sub($3,DATA)}1' dynaRcoupledmodel.k

输出:

R shthk     0.900000                                                            
R mue       0.123200
R nue       0.121400                                                            
R oue       0.137700                                                            
R ystress  150.23000
于 2012-06-06T14:13:00.263 回答