2

これはsedの私にとって本当の問題でした。

以下のようなオリジナルの入力ファイルがあります。

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なのか、次のように1つの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 に答える