Quero pegar o valor 0.98728E-02 do arquivo 1 que está na linha 2 e colocar no lugar o valor 1.000 do arquivo 2 que está na linha 8. Como fazer a substituição do arquivo 1 pelo arquivo 2?
Meu arquivo 1:
Genetic variance(s) for effect 2
0.98728E-02
Genetic variance(s) for effect 3
0.56818E-02
Preciso pegar os valores "0.98728E-02" e colocar line no lugar do "1.0000" do arquivo 2
Meu arquivo 2:
DATAFILE
renf90.dat
NUMBER_OF_TRAITS
1
NUMBER_OF_EFFECTS
9
RANDOM_RESIDUAL VALUES
1.0000
RANDOM_GROUP
2
Comecei a fazer na linguagem "sed", mas não sei mais o que fazer...
sed '23s/1.0000/ .....
Arquivo final que quero ter.
DATAFILE
renf90.dat
NUMBER_OF_TRAITS
1
NUMBER_OF_EFFECTS
9
RANDOM_RESIDUAL VALUES
0.98728E-02
RANDOM_GROUP
2
PS: Você não possui palavras-chave constantes antes ou depois das linhas. PS: Dependendo do arquivo de saída (Arquivo 1), precisarei extrair dois ou três valores.
Responder1
Tenho certeza de que é possível sed
, mas você poderia facilmente fazer isso com awk
:
awk 'NR==2 { value=$1 }
FILENAME=="file2" { if (FNR==8) print value; else print }
' file1 file2 > output_file
Responder2
Substitua a linha 8 file2
pelo conteúdo da linha 2 file1
por sed
:
Isso muda file2
de lugar
sed -i'' '8s/.*/'"$(sed -n '2p' file1)"'/' file2
ou o mesmo que acima, mas escreva as alterações emfile2.new
sed '8s/.*/'"$(sed -n '2p' file1)"'/' file2 > file2.new
Responder3
i=`sed -n '2p' file1`
sed "8s/1.0000/$i/g" file2
saída
DATAFILE
renf90.dat
NUMBER_OF_TRAITS
1
NUMBER_OF_EFFECTS
9
RANDOM_RESIDUAL VALUES
0.98728E-02
RANDOM_GROUP
2
Nota: se você quiser a saída deve estar no arquivo2
sed -i "8s/1.0000/$i/g" file2