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

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

У меня есть 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 
  • Как удалить символ и пробел из строки
  • скопировать заголовок в каждую ячейку своей строки
  • Как найти матч с окружающими словами?
  • Как отобразить последний абзац текстового документа?
  • Поиск шаблона и добавление строки в другой файл
  • Удалите все пробелы после определенного слова
  • скопировать и заменить столбец с помощью unix
  • отображать содержимое файла с начала до многострочного шаблона
  • Столбец Unix Truncate в файле csv
  • извлекать данные из текстовых файлов в csv
  • Как найти строку в файлеA, выбрать текст из этой строки и заменить строку на fileB?
  • Linux и Unix - лучшая ОС в мире.