track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Die Null abschneiden geht bei awk noch viel einfacher: addiere Null dazu, und er kürzt die Nachkommastellen ganz von selber weg: status="$( awk -F ';' "/$SKU/"' {print $2 +0; exit}' /home/fox/a4e-scripte/roega/ART_$date.csv )" Jaja, awk ist zwar uralt, aber ganz pfiffig gemacht. 😉 LG, track
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 13213
|
FoxMulder schrieb: Das ist ja cooool!!! ☺
😀
Hätte nicht gedacht das man das alles NUR mit awk machen kann..☺ (hätte wohl doch was anderes lernen sollen ^^)
Was anderes als was?
Das Ergebnis ist jedenfalls das gleiche...das find ich cool!
Tja... 😉
Ich hab das Script nun mal deinen Angaben nach umgestellt und den Cron umgestellt sodass er gleich mal startet...ich bin gespannt!
Und icke erst.
Die Quell-CSV ist so aufgebaut:
107A40582;0.0
Du willst dann doch bestimmt die ganze Artikelnummer matchen, oder? Dann würde ich es so machen: | status="$( awk -F ';' '$1 == '"$SKU"' {gsub(/\.0+/, "", $2); print $2; exit}' /home/fox/a4e-scripte/roega/ART_$date.csv )"
|
Die erste Spalte ist die Artikelnummer und die zweite der Lieferstand. Dieser ist mal 0.0 und mal 99.0 oder 10.0 (je nach Lagermenge). Da dieses .0 jedoch nicht interessiert muss ich das halt wegschneiden.
OK, dann also doch /\.0+/.
Danke dir vielmals für deine Hilfe! Ich gebe Rückmeldung wenn der Cron gelaufen ist. 😉
Bitteschön. Ciao robert
|
FoxMulder
(Themenstarter)
Anmeldungsdatum: 23. April 2007
Beiträge: 105
|
Leute...das Script ist durchgelaufen und so wie es aussieht ohne weitere Fehlermeldungen!!!! ☺
GEIL!! DANKE EUCH! ☺
Damit kann ich dann auch noch einen anderen Lieferanten abändern...der liefert auch mit ner CSV an. ☺ COOOOL!! DANKE DANKE DANKE...freu mich wie nen kleines Schulkind..😉 @rklm Was anderes als was?
Naja...hab IT Systemelektroniker gelernt...aber da wenig im Bezug auf Linux & Programmierung. Das bissel was ich mache ist alles learning by doing und so.
Du willst dann doch bestimmt die ganze Artikelnummer matchen, oder? Dann würde ich es so machen:
Jups...so ist es...die neue Befehlszeile werde ich auch noch mal testen...😉 Also Leute...habt vielen vielen Dank! Ich denke damit kann dieses Thema als "gelöst" angesehen werden. 😉 Danke und grüße und vorab schon Frohe Weinachten! 😉
Fox
|
FoxMulder
(Themenstarter)
Anmeldungsdatum: 23. April 2007
Beiträge: 105
|
Moin zusammen... leider leider leider kommt es doch noch zu einem kleinen Problem...☹ | ++ awk -F ';' '/NOVAN12TR1/RT/ {gsub(/\.0/, "", $2); print $2; exit}' /home/fox/a4e-scripte/roega/ART_2012.12.11.csv
awk: line 1: syntax error at or near {
|
Das liegt wohl an der Artikelnummer "NOVAN12TR1/RT". awk scheint mit dem / nicht klar zu kommen. ☹ Kann man nicht sagen das NOVAN12TR1/RT ein String ist? Die Nummer in "" oder zu setzen hat leider nix gebracht. Betrifft aber auch nicht so viele Artikel...hmm...
Falls es zu kompliziert sein sollte...dann hau ich diese Artikel raus...😉
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Man kann solche Zeichen einbinden, indem man sie schützt: awk -F ';' '/NOVAN12TR1\/RT/ {gsub(/\.0/, "", $2); print $2; exit}' /home/fox/a4e-scripte/roega/ART_2012.12.11.csv Hier wäre allerdings eine andere Alternative geschickter, nämlich der direkter Textvergleich anstelle von Regulären Ausdrücken. Eigentlich willst Du ja sowieso exakt vergleichen: awk -F ';' '$1 == "NOVAN12TR1/RT" {print $2 +0; exit}' /home/fox/a4e-scripte/roega/ART_2012.12.11.csv Das hatte Dir Robert aber gestern schon vorgeschlagen ! - du solltest vielleicht unsere Vorschläge auch mal einbauen ...!? Ok, er hatte noch das Paar Gänsefüßchen für awk vergessen: status="$( awk -F ';' '$1 == " '"$SKU"' " {print $2 +0 ; exit}' /home/fox/a4e-scripte/roega/ART_$date.csv )" LG, track
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 13213
|
track schrieb: Hier wäre allerdings eine andere Alternative geschickter, nämlich der direkter Textvergleich anstelle von Regulären Ausdrücken. Eigentlich willst Du ja sowieso exakt vergleichen: awk -F ';' '$1 == "NOVAN12TR1/RT" {print $2 +0; exit}' /home/fox/a4e-scripte/roega/ART_2012.12.11.csv Das hatte Dir Robert aber gestern schon vorgeschlagen ! - du solltest vielleicht unsere Vorschläge auch mal einbauen ...!?
☺ Heute würde ich es so machen um solchen Problemen aus dem Weg zu gehen: | status="$( awk -F ';' -v "sku=$SKU" '$1 == sku {gsub(/\.0+/, "", $2); print $2; exit}' /home/fox/a4e-scripte/roega/ART_$date.csv )"
|
Das ist noch besser, weil man nicht extra escapen muss sondern den Text einfach in einer awk -Variablen ablegt. Ciao robert
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Robert, ich glaube, das nimmt sich nichts. Jedenfalls habe ich bei beiden Versionen keinen Fehler provozieren können. Edit: doch, macht doch was aus. Wenn die Artikelnummer ein " enthält knallt meine, Deine nicht. Allerdings würde ich dieses hässliche gsub(...) doch lieber durch print $2 +0 ersetzen. Das ist übersichtlicher und entspricht auch mehr dem, war eigentlich gemeint ist. LG, track
|
FoxMulder
(Themenstarter)
Anmeldungsdatum: 23. April 2007
Beiträge: 105
|
Danke euch für eure weitere Unterstützung und Geduld mit mir..😉 Hab es eben mit dem Vorschlag von "track" versucht und lasse gerade das Script noch mal laufen. Aber die Tests sahen sehr gut aus. 😉 Ich gebe gleich noch eine Rückmeldung wenn der Cron gelaufen ist.
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
FoxMulder schrieb: Hab es eben mit dem Vorschlag von "track" versucht und lasse gerade das Script noch mal laufen. Aber die Tests sahen sehr gut aus. 😉
Übernimm bitte den Hinweis von Robert mit der Zuweisung an eine awk-Variable: awk -F ';' -v "sku=$SKU" '$1 == sku { ... - meine Version ist nicht ganz wasserdicht, siehe meinen Edit: oben ! LG, track
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 13213
|
track schrieb: Robert, ich glaube, das nimmt sich nichts. Jedenfalls habe ich bei beiden Versionen keinen Fehler provozieren können. Edit: doch, macht doch was aus. Wenn die Artikelnummer ein " enthält knallt meine, Deine nicht.
Eben. Man packt den Wert in die Variable und lässt das awk machen anstatt ein String-Literal zu erzeugen.
Allerdings würde ich dieses hässliche gsub(...) doch lieber durch print $2 +0 ersetzen. Das ist übersichtlicher und entspricht auch mehr dem, war eigentlich gemeint ist.
Da finde ich aber int() noch besser, denn "eigentlich gemeint" ist ja das Abschneiden der Nachkommastellen: | status="$( awk -F ';' -v "sku=$SKU" '$1 == sku {print int($2); exit}' /home/fox/a4e-scripte/roega/ART_$date.csv )"
|
☺ robert
|
FoxMulder
(Themenstarter)
Anmeldungsdatum: 23. April 2007
Beiträge: 105
|
So Jungs... habs nun wie von euch geschrieben mit der Variante "awk -F ';' -v "sku=$SKU" '$1 == sku { ... " laufen lassen...und was soll ich sagen...HAMMER! ☺ Alles ohne Fehler durchgelaufen und die Stichproben ergaben das alles passt wie es soll! Also...nun können wir das Thema wohl abschließen! ☺ DANKE DANKE DANKE DANKE EUCH VIELMALS!!!! Und Frohe Weihnachten sowie einen guten Rutsch! 😉 Danke und LG
Fox
|