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 file2
durch den Inhalt von Zeile 2 file1
durch sed
:
Dies ändert sich file2
vor 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