Hallo habe mal eine Frage wie kann ich einen Wert aus einer datei lesen und in eine andere datei speichern Bräuchte den Wert dritte Stelle(45910) mit kommastelle also 459,10
111300022222|Steckdose|45910|230676|31986|280|0|2820|706
Danke Lg
Anmeldungsdatum: Beiträge: 6 |
Hallo habe mal eine Frage wie kann ich einen Wert aus einer datei lesen und in eine andere datei speichern Bräuchte den Wert dritte Stelle(45910) mit kommastelle also 459,10 111300022222|Steckdose|45910|230676|31986|280|0|2820|706 Danke Lg |
||
Supporter, Wikiteam
Anmeldungsdatum: Beiträge: 18225 Wohnort: in deinem Browser, hier auf dem Bildschirm |
Das Tool cut kann dir hier helfen. Damit bekommst du dann den 3. Wert. m@ryz:~$ echo '111300022222|Steckdose|45910|230676|31986|280|0|2820|706' |cut -d "|" -f3 45910 m@ryz:~$ |
||
Projektleitung
Anmeldungsdatum: Beiträge: 13213 |
Und wenn das immer mindestens dreistellige Cent-Beträge sind, kann man das Komma so einfügen:
|
||
(Themenstarter)
Anmeldungsdatum: Beiträge: 6 |
Würde das funktionieren?? TEMP=$(echo "scale=1;$(cut -d "|" -f3 /var/temp/aha_60-087610249191.csv ) / 1000 "|bc -l) |
||
Supporter
Anmeldungsdatum: Beiträge: 1274 |
Na ja, fast. Statt durch 1000 sollte man besser durch 100 teilen und 2 Nachkommastellen wählen. bc arbeitet mit Dezimalpunkt, den man dann in ein Dezimalkomma wandeln müsste: TEMP=$(echo "scale=2;$(cut -d "|" -f3 /var/temp/aha_60-087610249191.csv ) / 100"| /usr/bin/bc -l | tr '.' ',') echo $TEMP 459,10 |
||
Anmeldungsdatum: Beiträge: 11265 Wohnort: München |
Oder man macht das unter Berücksichtigung der locale-Einstellungen:
Der Aufruf wäre dann z.B. so, wenn man das Skript ausführbar gemacht hat: echo '111300022222|Steckdose|45910|230676|31986|280|0|2820|706' | ./parse_amount.py # bzw. ./parse_amount.py /var/temp/aha_60-087610249191.csv und die Ausgabe kann man in eine Datei umleiten (vgl. Shell/Umleitungen): ./parse_amount.py /var/temp/aha_60-087610249191.csv > output.csv |
||
Supporter
Anmeldungsdatum: Beiträge: 1274 |
bc arbeitet wirklich nicht Posix complient und ignoriert LC_NUMERIC. ABER bei awk kann man Posix erzwingen: $ echo '111300022222|Steckdose|45910|230676|31986|280|0|2820|706' | awk -F"|" '{printf "%''.2f\n",$3/100}' 459.10 $ # ABER mit POSIX (-P oder --posix) $ echo '111300022222|Steckdose|45910|230676|31986|280|0|2820|706' | awk -P -F"|" '{printf "%5.2f\n",$3/100}' 459,10 $ $ locale -k LC_NUMERIC decimal_point="," thousands_sep="." grouping=3;3 numeric-decimal-point-wc=44 numeric-thousands-sep-wc=46 numeric-codeset="UTF-8" $ |