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

У меня есть следующие данные:

*DEFINE_CURVE_TITLE
Force for tool binder
$#    lcid      sidr       sfa       sfo      offa      offo    dattyp
     3         0  1.000000 125.00000     0.000     0.000         0
$#                a1                  o1
           0.000               0.000
       0.5000000          -1.0000000
     100.0000000          -1.0000000

Я хочу изменить 3-ю строку после * DEFINE_CURVE_TITLE, например

     3         0  1.000000 107.00000     0.000     0.000         0

, чтобы она стала

*DEFINE_CURVE_TITLE
Force for tool binder
$#    lcid      sidr       sfa       sfo      offa      offo    dattyp
     3         0  1.000000 107.00000     0.000     0.000         0
$#                a1                  o1
           0.000               0.000
       0.5000000          -1.0000000
     100.0000000          -1.0000000

Вопрос в том, что я могу искать требуемую строку следующим образом

sed -i -e '/^\**DEFINE_CURVE_TITLE/{n;n;n;R $4 newBHF.txt' -e 'd}' input.txt

Таким образом, я нахожусь на строке для редактирования, т.е. на три строки ниже строки поиска.

Теперь яизменить значение $ 4 с 125,00000 на другое значение, которое может быть взято из newBHF.txt .Это newBHF.txt имеет необходимую замену, т.е. только одно значение 107.00000.Если возможно, пожалуйста, также скажите мне, как я могу установить $ 4 , если у меня есть значение в , другая переменная в той же программе .

awk -v p="$(cat newBHF.txt)" '/^\*DEFINE_CURVE_TITLE/{x=NR+3}NR==x{$5=p}1' input.txt  

, кажется, работает, ноне сохраняя формат.Может ли эксперт помочь с sed?Это поможет мне многое сделать.

С наилучшими пожеланиями

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...