ファイルから値を抽出し、その値を別のファイルの特定の行に配置する

ファイルから値を抽出し、その値を別のファイルの特定の行に配置する

ファイル 1 の 2 行目にある値 0.98728E-02 を取得し、ファイル 2 の 8 行目にある値 1,000 を代入します。ファイル 1 の値をファイル 2 に置き換えるにはどうすればよいですか?

私のファイル1:

Genetic variance(s) for effect  2       
0.98728E-02
Genetic variance(s) for effect  3       
0.56818E-02

値「0.98728E-02」を取得し、ファイル2の「1.0000」の代わりに行に入力する必要があります。

私のファイル2:

DATAFILE 
renf90.dat 
NUMBER_OF_TRAITS 
1 
NUMBER_OF_EFFECTS 
9 
RANDOM_RESIDUAL VALUES 
1.0000
RANDOM_GROUP 
2

「sed」言語でやり始めたのですが、他に何をすればいいのかわかりません…

sed '23s/1.0000/  .....

私が欲しい最終ファイル。

DATAFILE 
renf90.dat 
NUMBER_OF_TRAITS 
1 
NUMBER_OF_EFFECTS 
9 
RANDOM_RESIDUAL VALUES 
0.98728E-02
RANDOM_GROUP 
2

PS: 行の前後に定数キーワードはありません。PS: 出力ファイル (ファイル 1) に応じて、2 つまたは 3 つの値を抽出する必要があります。

答え1

で可能だと確信していますsedが、 を使用すると簡単に実行できますawk

awk 'NR==2 { value=$1 }
     FILENAME=="file2" { if (FNR==8) print value; else print }
' file1 file2 > output_file

答え2

の 8 行目をのfile22 行目の内容に置き換えます。file1sed

file2これは場所によって変わる

sed -i'' '8s/.*/'"$(sed -n '2p' file1)"'/' file2

または上記と同じですが、変更を書き込むfile2.new

sed '8s/.*/'"$(sed -n '2p' file1)"'/' file2 > file2.new

答え3

i=`sed -n '2p' file1`

sed  "8s/1.0000/$i/g" file2

出力

DATAFILE 
renf90.dat 
NUMBER_OF_TRAITS 
1 
NUMBER_OF_EFFECTS 
9 
RANDOM_RESIDUAL VALUES 
0.98728E-02
RANDOM_GROUP 
2

注意: 出力をファイル2にしたい場合は

sed -i   "8s/1.0000/$i/g" file2

関連情報