Extrahieren von Werten aus einer Datei und Einfügen dieser Werte in eine bestimmte Zeile einer anderen Datei

Extrahieren von Werten aus einer Datei und Einfügen dieser Werte in eine bestimmte Zeile einer anderen Datei

Ich möchte den Wert 0,98728E-02 aus Datei 1 in Zeile 2 abrufen und ihn durch den Wert 1.000 aus Datei 2 in Zeile 8 ersetzen. Wie ersetze ich Datei 1 durch Datei 2?

Meine Datei 1:

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

Ich muss die Werte "0.98728E-02" abrufen und in die Zeile anstelle von "1.0000" aus Datei 2 einfügen.

Meine Datei 2:

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

Ich habe angefangen, es in der Sprache „sed“ zu tun, aber ich weiß nicht, was ich sonst tun soll …

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

Endgültige Datei, die ich haben möchte.

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

PS: Sie haben keine konstanten Schlüsselwörter vor oder nach den Zeilen. PS: Abhängig von der Ausgabedatei (Datei 1) muss ich zwei oder drei Werte extrahieren.

Antwort1

Ich bin sicher, dass es mit möglich ist sed, aber Sie können es problemlos mit tun awk:

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

Antwort2

Ersetzen Sie Zeile 8 file2durch den Inhalt von Zeile 2 file1durch sed:

Dies ändert sich file2vor Ort

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

oder wie oben, aber Änderungen infile2.new

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

Antwort3

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

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

Ausgabe

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

Hinweis: Wenn Sie die Ausgabe wünschen, sollte sie in Datei2 erfolgen

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

verwandte Informationen