rurotil
Anmeldungsdatum: 7. April 2009
Beiträge: 96
|
Hallo, kann ich per akw oder gawk per Bash Script eine Formel innerhalb einer CSV Tabelle ausführen. Wenn in Zelle B2 kein Preis enthalten ist, soll das Script den Preis aus Zelle E2 nehmen und mit 2 multiplizieren.
Wenn ein Preis in Zelle B2 drinnen ist, den Preis erhalten.
Das soll dann von Zeile 2 bis zum ende laufen. Bekommt man sowas hin?
|
Doc_Symbiosis
Anmeldungsdatum: 11. Oktober 2006
Beiträge: 4212
|
Kannst Du mal ein paar Beispielzeilen deiner CSV zeigen, also die ersten 10 oder so? Vor allem sollten zwei Zeilen, einmal ohne und einmal mit Preis in Spalte b vorhanden sein.
|
rurotil
(Themenstarter)
Anmeldungsdatum: 7. April 2009
Beiträge: 96
|
Ja kann ich,
ProductId;ReferenceNo;EAN;Manufacturer;Price_B2B_Regular;Price_B2B_Discounted;Price_B2B_DiscountPercent;Price_B2B_DiscountAmount;Price_B2C_exclVAT;Price_B2C_inclVAT
3910113;AP9641;1,31304E+11;APC by Schneider Electric;19;19;0;0;0;0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1402176;P51U;8,87993E+11;Shuttle;2;2;0;0;0;0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5750126;LC125XLC;4,97777E+12;Brother;11,7;11,7;0;0;0;0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6481717;YEG-00496;343434365;Microsoft;11,1;11,1;0;0;31,75;46,31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
4539967;FQC-08929;8,85371E+11;Microsoft;422,23;422,23;0;0;0;0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6170025;90MB0SY0-M0EAY0;1,7129E+12;Asustek;66,33;66,33;0;0;0;0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6452531;R18-05735;3,39994E+12;Microsoft;24;24;0;0;1,8;1,93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
6480658;C28-00002;;Microsoft;54,22;54,22;0;0;61,63;96,13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5310142;UC2T0E;;Hewlett Packard;42;42;0;0;0;0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Das wäre meine Formel dazu
=WENN(I2=0;E2*1,2;I2)
in Datei test.csv in FELD X von Zeile 2 bis ende
|
Doc_Symbiosis
Anmeldungsdatum: 11. Oktober 2006
Beiträge: 4212
|
Hm, und was ist jetzt FELD X? Ist dachte mit B2 meintest Du einfach die zweite Spalte, aber dem ist wohl nicht so.
|
rurotil
(Themenstarter)
Anmeldungsdatum: 7. April 2009
Beiträge: 96
|
bei Feld X soll einfach nur das Ergebnis stehen, aber wo das genau ist, ist mir eigentlich egal.
Der Wert soll einfach nur pro Zeile in irgendeiner Spalte stehen.
|
kB
Supporter, Wikiteam
Anmeldungsdatum: 4. Oktober 2007
Beiträge: 7816
|
rurotil schrieb: […] Wenn in Zelle B2 kein Preis enthalten ist, soll das Script den Preis aus Zelle E2 nehmen und mit 2 multiplizieren.
Wenn ein Preis in Zelle B2 drinnen ist, den Preis erhalten.
Das soll dann von Zeile 2 bis zum ende laufen.
Eine typische Aufgabe für eine Tabellenkalkulation.
Bekommt man sowas hin?
Ja, mit einer Tabellenkalkulation. Die sind genau für so etwas erschaffen. Wähle stets ein der Aufgabenstellung angemessenes Werkzeug.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12527
|
rurotil schrieb:
Das wäre meine Formel dazu
=WENN(I2=0;E2*1,2;I2)
Also, I2 und E2 gibt es ja in einer CSV-Datei nicht. Ich vermute mal, Du meinst mit "I" Feld Nr. 9 und mit "E" Feld Nr. 5. Der Teil "E2*1,2" in der Formel kommt mir etwas seltsam vor. Wolltest Du nicht verdoppeln, also "E2*2"?
in Datei test.csv in FELD X von Zeile 2 bis ende
Meinst Du vielleicht so etwas? | awk -F \; -v OFS=\; 'NR==1; NR>1{if(!$9) $9=$5*2; print}' data
|
Wenn Du zeilenübergreifend rechnen willst, stimme ich kB zu: das sollte man dann lieber mit Libre Office Calc o.ä. machen.
|
rurotil
(Themenstarter)
Anmeldungsdatum: 7. April 2009
Beiträge: 96
|
Ich habe es nun doch lösen können mit "miller" so sieht es nun das Ergebnis aus: mlr --csv --fs ';' --ragged \
remove-empty-columns then \
put '
$x = $Price_VAT;
$x == 0 {
$x = 1.2*float(ssub(string($Price_Regular),",","."));
$x = ssub(string($x),".",",");
}' products.csv
|
rurotil
(Themenstarter)
Anmeldungsdatum: 7. April 2009
Beiträge: 96
|
Ich hatte leider etwas vergessen. Wenn in der Tabelle der Wert nicht Null ist, sondern einfach nur leer. Funktionert das leidern icht.
Kann man das auch noch lösen? Das waren meine Ansätze: mlr --csv --fs ';' --ragged \
remove-empty-columns then \
put '
$x = $Price_VAT;
$x == 0 {
$x = 1.2*float(ssub(string($Price_Regular),",","."));
$x = ssub(string($x),".",",");
}' products.csv oder POSIXLY_CORRECT=1 awk -F ';' -v OFS=';' '
{print $0, NR == 1 ? "Price" : $1 ? $1 : $3 * 1.2}' < products.csv
|
noisefloor
Ehemaliger
Anmeldungsdatum: 6. Juni 2006
Beiträge: 28316
|
Hallo,
Wähle stets ein der Aufgabenstellung angemessenes Werkzeug.
Wenn es keine Tabellenkalkulation mit GUI (wie LibreOffice oder Excel) sein soll / darf, kann man das auch mit entsprechenden Skripten und Bibliotheken in der Programmiersprache seiner Wahl machen. Für Python wäre das hier z.B. Pandas 🇬🇧. Entsprechende Bibliotheken / Module gibt es aber auch sicherlich für die meisten anderen gängigen Programmiersprache. Wenn du das rein als Bash Skript machen willst kommst du sicherlich irgendwann an die Grenzen, weil das nicht wirklich für 2-dimensionale, tabulare Daten ausgelegt ist. Gruß, noisefloor
|
rurotil
(Themenstarter)
Anmeldungsdatum: 7. April 2009
Beiträge: 96
|
Ja verstehe ich grundsätzlich schon. Aber mit diesen 2 Formeln funktioinert es doch bisher schon. Jetzt bräuchte ich da nur noch die Funktion wenn 0 oder ""
Das bekommt man doch sicherlich noch irgendwie hin?
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12527
|
rurotil schrieb:
Aber mit diesen 2 Formeln funktioinert es doch bisher schon. Jetzt bräuchte ich da nur noch die Funktion wenn 0 oder ""
Das bekommt man doch sicherlich noch irgendwie hin?
Klar, denn die bash ist - wie die anderen Sprachen - Turing-vollständig. Ist halt nur die Frage, welches Maß an Schmerzen Du Dir antun willst.
|