Я хочу получить значение 0,98728E-02 из файла 1, который находится в строке 2, и подставить на его место значение 1000 из файла 2, которое находится в строке 8. Как выполнить замену файла 1 на файл 2?
Мой файл 1:
Genetic variance(s) for effect 2
0.98728E-02
Genetic variance(s) for effect 3
0.56818E-02
Мне нужно получить значения «0.98728E-02» и вставить их в строку вместо «1.0000» файла 2
Мой файл 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) мне нужно будет извлечь два или три значения.
решение1
Я уверен, что это возможно с помощью sed
, но вы могли бы легко сделать это с помощью awk
:
awk 'NR==2 { value=$1 }
FILENAME=="file2" { if (FNR==8) print value; else print }
' file1 file2 > output_file
решение2
Замените строку 8 file2
на содержимое строки 2 file1
на sed
:
Это меняет 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
Примечание: если вам нужен вывод, он должен быть в файле file2
sed -i "8s/1.0000/$i/g" file2