Quiero obtener el valor 0.98728E-02 del archivo 1 que está en la línea 2 y colocar el valor de 1000 del archivo 2 que está en la línea 8. ¿Cómo sustituir el archivo 1 por el archivo 2?
Mi archivo 1:
Genetic variance(s) for effect 2
0.98728E-02
Genetic variance(s) for effect 3
0.56818E-02
Necesito obtener los valores "0.98728E-02" y ponerlos en línea en lugar del "1.0000" del archivo 2.
Mi archivo 2:
DATAFILE
renf90.dat
NUMBER_OF_TRAITS
1
NUMBER_OF_EFFECTS
9
RANDOM_RESIDUAL VALUES
1.0000
RANDOM_GROUP
2
Empecé a hacerlo en lenguaje "sed", pero ya no sé que más hacer...
sed '23s/1.0000/ .....
Archivo final que quiero tener.
DATAFILE
renf90.dat
NUMBER_OF_TRAITS
1
NUMBER_OF_EFFECTS
9
RANDOM_RESIDUAL VALUES
0.98728E-02
RANDOM_GROUP
2
PD: No tienes palabras clave constantes antes o después de las líneas. PD: Dependiendo del archivo de salida (Archivo 1), necesitaré extraer dos o tres valores.
Respuesta1
Estoy seguro de que es posible con sed
, pero puedes hacerlo fácilmente con awk
:
awk 'NR==2 { value=$1 }
FILENAME=="file2" { if (FNR==8) print value; else print }
' file1 file2 > output_file
Respuesta2
Reemplace la línea 8 de file2
con el contenido de la línea 2 de file1
con sed
:
Esto cambia file2
en su lugar
sed -i'' '8s/.*/'"$(sed -n '2p' file1)"'/' file2
o lo mismo que arriba, pero escriba los cambios enfile2.new
sed '8s/.*/'"$(sed -n '2p' file1)"'/' file2 > file2.new
Respuesta3
i=`sed -n '2p' file1`
sed "8s/1.0000/$i/g" file2
producción
DATAFILE
renf90.dat
NUMBER_OF_TRAITS
1
NUMBER_OF_EFFECTS
9
RANDOM_RESIDUAL VALUES
0.98728E-02
RANDOM_GROUP
2
Nota: si desea que la salida esté en el archivo 2
sed -i "8s/1.0000/$i/g" file2