Заменить текстовые поля со значениями из другого файла

Хорошо, я не могу понять, как это сделать.

У меня есть fileA который выглядит так:

 ([7]RIMS_ID) : "CNR" (refGain_A[7]) : 1 (RIMSclockBias_A[7]) : -398015316.7 (RIMSclockDrift_A[7]) : -6442.29 (RIMSclockSigma_A[7]) : .01 (RIMSclockSigY_A[7]) : 0 ([8]RIMS_ID) : "ABS" (refGain_A[8]) : 1 (RIMSclockBias_A[8]) : -374515458 (RIMSclockDrift_A[8]) : -6442.29 (RIMSclockSigma_A[8]) : .01 (RIMSclockSigY_A[8]) : 0 

и т. д., где [индекс] переходит от 0 до 71, и каждая станция имеет другой идентификатор.

Я хочу заменить значение, соответствующее строке RIMSclockBias_A каждой станции, значением, которое у меня есть на другом fileB как это:

 CNR -44163754.49 ABS 3417370.112 ... 

Итак, чтобы:

 ([7]RIMS_ID) : "CNR" (refGain_A[7]) : 1 (RIMSclockBias_A[7]) : -44163754.49 (RIMSclockDrift_A[7]) : -6442.29 (RIMSclockSigma_A[7]) : .01 (RIMSclockSigY_A[7]) : 0 ([8]RIMS_ID) : "ABS" (refGain_A[8]) : 1 (RIMSclockBias_A[8]) : 3417370.112 (RIMSclockDrift_A[8]) : -6442.29 (RIMSclockSigma_A[8]) : .01 (RIMSclockSigY_A[8]) : 0 

Я могу изолировать правильное поле с помощью комбинации grep в цикле for и awk , но я не знаю, как я могу заменить значение в самом файле. sed должен знать точное значение, которое я хочу заменить в качестве входного сигнала, поэтому это невозможно.

Есть идеи?

One Solution collect form web for “Заменить текстовые поля со значениями из другого файла”

Это тесно связано с другим вопросом только в этом случае замена должна быть сделана в первой строке, которая соответствует clockBias после шаблона. Если в вашем fileB не было специального символа, вы можете запустить с помощью gnu sed :

 sed -E 's|(.*)[[:blank:]](.*)|/\1/,/clockBias/{/clockBias/{s/(:[[:blank:]]{1,})(.*)/\\1\2/}}|' fileB | sed -Ef - fileA 

Это просто превращает строки в ваш fileB в команды sed например:

 /CNR/,/clockBias/{/clockBias/{s/(:[[:blank:]]{1,})(.*)/\1-44163754.49/}} 

а затем передает их во второй sed для обработки fileA


С неизвестным входом вам придется избегать каких-либо специальных символов в LHS / RHS, как я объяснил в ответе на другой вопрос (на этот раз с использованием синтаксиса BRE ):

 sed 's|\(.*\)[[:blank:]]\{1,\}\(.*\)|\1\ \2| h s|.*\n|| s|[\&/]|\\&|g x s|\n.*|| s|[[\.*^$/]|\\&|g G s|\(.*\)\n\(.*\)|/\1/,/clockBias/{/clockBias/{s/\\(:[[:blank:]]\\{1,\\}\\)\\(.*\\)/\\1\2/}}|' fileB | sed -f - fileA 
  • Как я могу обернуть текст при определенном размере столбца?
  • Подсчет строк строки
  • отображать содержимое файла с начала до многострочного шаблона
  • Замените все пробелы запятыми в текстовом файле
  • Сравнение 2 файлов со вторым файлом, содержащим подмножество данных из файла 1
  • Как подсчитать наличие шаблона в строке
  • Как поменять местами два поля, разделенные обратной косой чертой, и вывести их, разделенные знаком?
  • Как добавить двойные кавычки в каждую строку, а затем добавить запятую в конце строки?
  • Исключить ведущие нули на определенной записи
  • Резка строк в Unix
  • Выберите строку с пустой строкой выше и ниже
  • Interesting Posts

    Как узнать, могу ли я использовать ssh keypairs?

    Как запретить корень, разрешить отдельным пользователям во внутренней подсети и разрешать группы из внешних, на SSH / SFTP

    Как правильно настроить zram и swap

    Что означает -S означает в gksu -S mount …?

    GRUB больше не может загружать машину (разные сообщения об ошибках)

    Малый офисный сервер и UID-перевод

    Как предотвратить добавление / удаление цикла udev

    Как проверить, имеет ли файл уже строку с содержимым?

    Как отключить соединение wifi, связанное с wpa_supplicant

    Повторные файловые системы и точки монтирования в выводе df

    Как я могу отсортировать эти имена каталогов численно?

    Как создать правильный файл / etc / fstab для моего раздела LFS?

    Перенос установки Linux с жесткого диска на SSD, который уже установил Windows 10

    Установка каталога NFS в том хоста, который используется совместно с Docker

    По умолчанию umask 077 не применяется при запуске сеанса

    Linux и Unix - лучшая ОС в мире.