Multiplizieren von Zahlen direkt in einer Datei

Multiplizieren von Zahlen direkt in einer Datei

Ich habe eine ASCII-Datei mit folgenden Zahlen:

1 2 3
5 6 9
7 8 9 
. . . 
. . . 
. . . 
. . . 
. . .  etc

Ich möchte diese Datei aktualisieren, indem ich jeden Wert mit „3“ multipliziere, um Folgendes zu erhalten:

3 6 9
15 18 27
21 24 27 
. . . 
. . . 
. . . 
. . . 
. . .  etc

Ich möchte, dass diese Änderungen nach dem Ausführen des Skripts aktualisiert und automatisch in derselben ASCII-Datei gespeichert werden

Wie kann ich dies mit Standard-GNU-Dienstprogrammen erreichen? Ich kann die Werte folgendermaßen aktualisieren:

while IFS=",$IFS" read d1 d2 d3; do 
echo $(( $d1*3 )) $(( $d2*3 )) $(( $d3*3 )) 
done < file.txt #file.txt is the previous ASCII file

Antwort1

verwenden Sie awk:

$awk -F" "  '{$1*=3;$2*=3;$3*=3;print}' FILE | sponge FILE
$cat FILE
3 6 9
15 18 27
21 24 27
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0

Update: Sie können spongedas Programm verwenden, um die Ausgabe in die Eingabedatei zu schreiben

Sponge liest die Standardeingabe und schreibt sie in die angegebene Datei. Anders als bei einer Shell-Umleitung nimmt Sponge alle Eingaben auf, bevor die Ausgabedatei geöffnet wird. Dadurch können Pipelines eingeschränkt werden, die aus derselben Datei lesen und in dieselbe Datei schreiben.

Antwort2

Auf diese Weise können Sie neue Werte in einer Datei speichern:

awk -F" "  '{$1*=3;$2*=3;$3*=3;print}' FILE | tee FILE

verwandte Informationen