Unten ist die Eingabedatei, die zu diesem Zeitpunkt eine Vorlage ist. Ich möchte verschiedene '-' in jeder Zeile durch tatsächliche Daten aus einem Skript ersetzen.sed in einer while-Schleife
030 230 - - - - - - -
230 330 - - NA NA - - -
330 430 - - NA NA - - -
430 530 - - - - - - -
530 630 - - NA NA - - -
630 2400 - - - - - - -
Ich mag das Skript auszuführen und aktualisieren (in der gleichen Datei) eine Zeile zu einem Zeitpunkt, basierend auf den Bedingungen im Skript. Die aufeinanderfolgenden Ausführungen des Skripts würden andere Zeilen der Datei aktualisieren. Unten ist das Skript.
##Time=`echo $(date) | awk -F ' ' '{print $4}' | awk -F ':' '{print $1$2}'`
Time=0330;
while read -r f1 f2 f3 f4 f5 f6 f7 f8 f9
do
if (("${Time}" >= "${f1}" && "${Time}" < "${f2}"))
then
sed "s/$f3/R/;s/$f4/F/;s/$f5/G/;s/$f6/H/;s/$f7/K/"
else
echo $f1 $f2 $f3 $f4 $f5 $f6 $f7 $f8 $f9
fi
done < consolidated.txt
Erwartete Ausgabe ist unter.
030 230 - - - - - - -
230 330 - - NA NA - - -
330 430 R F NA NA G H K
430 530 - - - - - - -
530 630 - - NA NA - - -
630 730 - - - - - - -
gelten dann das Skript mit Time = 0600 auf der oben genannten Datei ausgeben so etwas wie dieses
030 230 - - - - - - -
230 330 - - NA NA - - -
330 430 R F NA NA G H K
430 530 - - - - - - -
530 630 A B NA NA D E F
630 730 - - - - - - -
aber nach dem Skript mit Zeit läuft = 0330 (erster Lauf) gibt es unten ausgegeben.
030 230 - - - - - - -
230 330 - - NA NA - - -
430 530 R F G H K - -
530 630 R F NA NA G H K
630 730 R F G H K - -
Auch diese Änderungen sind in der Stdout und nicht in der Datei vorgenommen. Ich habe versucht, die sed-Flag -i zu verwenden, die keine anerkannte Flagge auf meinem System ist.
Ich denke, es muss Variation in der Art und Weise sein, in der sed verwendet wird, aber nicht sicher, was.
Ich habe meine Antwort erheblich geändert. Im Allgemeinen ist es besser, die einfachste verfügbare Option zu verwenden, in diesem Fall ein einfaches "Echo". Wenn Sie die Daten in derselben Datei aufbewahren müssen, ist es besser, wenn ein Skript die Verarbeitung durchführt und eine, die eine temporäre Datei generiert und dann die Datei überschreibt. z.B. 'konsolidiert.txt | ./script.sh> /tmp/tmp_consolidated.txt && mv /tmp/tmp_consolidated.txt konsolidiert.txt'.Auf diese Weise bleibt die Originaldatei erhalten, wenn irgendwo im Skript etwas schief geht (nicht nur innerhalb des if). – grochmal