как заменить конкретную запись в строке, содержащей строку, номером из другого файла, используя редактирование sed в linux - PullRequest
0 голосов
/ 29 марта 2012

У меня есть входной файл, подобный следующему.

R sfst     1000.0000                                                            
$ new time step for mass scaled calculation
R dt2ms    -4.000E-7                                                            
$ friction value for blank
R mue       0.120000                                                            
$ blankholder force
R bhf      2.0000E+5                                                            
$ simulation time
R endtime   0.150000

я хочу изменить значение в строке, содержащей 'mue' со следующим я могу читать, но не могу изменить его.

awk ' /mue/ { print $3 } ' input.txt

Значение должно быть взято из другого файла fric.txt. fric.txt содержит только цифры, по одному в каждой строке.

fric.txt содержит данные типа

0.1234
0.234
0.0234

. .

Blockquote

Следует отметить, что ТОЛЬКО ПЕРВЫЙ экземпляр должен быть заменен, а формат, то есть интервал белого должен быть сохранен.

Blockquote

Кто-нибудь может мне помочь, используя sed или awk?

Ответы [ 3 ]

2 голосов
/ 29 марта 2012

Попробуйте эту команду:

$ awk '/mue/ && !seen {getline $3 <"fric.txt"; seen=1} 1' input.txt
1 голос
/ 29 марта 2012

Это может работать для вас:

sed '/\<mue\>/!d;=;s/.* \([^ ]\+\).*/\1/;R fric.txt' input.txt |
sed 'N;N;s|\n|s/|;s|\n|/|;s|$|/|;q' >temp.sed
sed -i -f temp.sed input.txt
1 голос
/ 29 марта 2012

Вы можете сделать это с помощью sed в sed (при условии, что вы хотите взять строку 1 из fric.txt):

sed -ir 's/(.*mue[ \t]+)[0-9.]+(.*)/\1'$(sed -n '1{p;q}' fric.txt)'\2/' input.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...