Ersetzen Sie Textfelder durch Werte aus einer anderen Datei

Ersetzen Sie Textfelder durch Werte aus einer anderen Datei

Okay, ich kann nicht herausfinden, wie das geht.

Ich habe eins, fileAdas so aussieht:

([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     

und so weiter, wobei der [Index] von 0 bis 71 geht und jede Station eine andere ID hat.

RIMSclockBias_AIch möchte den dem String jeder Station entsprechenden Wert durch einen Wert ersetzen, den ich auf einer anderen habe fileB, und zwar wie folgt:

CNR -44163754.49
ABS 3417370.112
...

Also zu haben:

([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 

Ich kann das richtige Feld mit einer Kombination aus grepin einer forSchleife und isolieren awk, weiß aber nicht, wie ich den Wert in der Datei selbst ersetzen kann. Ich sedmuss den genauen Wert kennen, den ich als Eingabe ersetzen möchte, also ist das nicht machbar.

Irgendeine Idee?

Antwort1

Dies hängt eng zusammen miteine andere Fragenur in diesem Fall muss die Ersetzung in der ersten Zeile erfolgen, die clockBiasnach dem Muster übereinstimmt. Wenn in Ihrem kein Sonderzeichen vorhanden wäre, fileBkönnten Sie Folgendes ausführen gnu sed:

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

Dadurch werden die Zeilen in Ihrer Datei einfach fileBin sedBefehle umgewandelt, z. B.:

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

und übergibt sie dann an den zweiten sedzur Verarbeitung fileA.


Bei unbekannten Eingaben müssen Sie alle Sonderzeichen in derLinks/rechtswie ich in meiner Antwort auf die andere Frage erklärt habe (diesmal mitBRESyntax):

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

verwandte Informationen