Muy bien, no puedo entender cómo hacer esto.
Tengo uno fileA
que se parece a esto:
([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
y así sucesivamente donde el [índice] va de 0 a 71 y cada estación tiene un ID diferente.
Quiero reemplazar el valor correspondiente a RIMSclockBias_A
la cadena de cada estación por un valor que tengo en otra fileB
como esta:
CNR -44163754.49
ABS 3417370.112
...
Entonces tener:
([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
Puedo aislar el campo correcto con una combinación de grep
en un for
bucle y awk
, pero no sé cómo puedo reemplazar el valor en el archivo. sed
Necesita saber el valor exacto que quiero reemplazar como entrada, por lo que no es factible.
¿Alguna idea?
Respuesta1
Esto está estrechamente relacionado conotra preguntasólo en este caso la sustitución debe realizarse en la primera línea que coincida clockBias
después del patrón. Si no hubiera ningún carácter especial en tu, fileB
podrías ejecutar con gnu sed
:
sed -E 's|(.*)[[:blank:]](.*)|/\1/,/clockBias/{/clockBias/{s/(:[[:blank:]]{1,})(.*)/\\1\2/}}|' fileB | sed -Ef - fileA
Eso simplemente convierte las líneas en fileB
comandos sed
, por ejemplo:
/CNR/,/clockBias/{/clockBias/{s/(:[[:blank:]]{1,})(.*)/\1-44163754.49/}}
y luego los pasa al segundo sed
para procesarlos fileA
.
Con una entrada desconocida, tendrías que escapar de cualquier carácter especial en elLHS/RHScomo expliqué en mi respuesta a la otra pregunta (esta vez usandoBREsintaxis):
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