Okay, ich kann nicht herausfinden, wie das geht.
Ich habe eins, fileA
das 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_A
Ich 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 grep
in einer for
Schleife und isolieren awk
, weiß aber nicht, wie ich den Wert in der Datei selbst ersetzen kann. Ich sed
muss 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 clockBias
nach dem Muster übereinstimmt. Wenn in Ihrem kein Sonderzeichen vorhanden wäre, fileB
kö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 fileB
in sed
Befehle umgewandelt, z. B.:
/CNR/,/clockBias/{/clockBias/{s/(:[[:blank:]]{1,})(.*)/\1-44163754.49/}}
und übergibt sie dann an den zweiten sed
zur 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