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

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

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