PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : awk string zusammensetzen



D_O_Z_E_R
04-12-2007, 12:51
hallo,

ich habe folgendes Problem:

aus einer csv Datei werden zunächst alle ; entfernt und möchte dann
mit awk eine .sql datei bauen.

ich versuche es folgendermassen:

sed 's/;/ /g' shop_preise1.csv |awk '{p=$1;m=$2;print "UPDATE products SET products_price = #"p"# WHERE products_model = #" m "#" }'

was ich nun nicht verstehe, warum wird die letzte raute an den anfang der zeile gesschrieben so das das ergebniss so aussieht:

#PDATE products SET products_price = #3.500,00# WHERE products_model = #1.335-204.0

er überschreibt das U von UPDATE obwohl das doch am ende stehen sollte/muesste. wer hilft mir da vom schlauch runter zu kommen? :)

jan61
04-12-2007, 15:02
Moin,

ist Deine CSV-Datei von einem Win-Rechner? Mit DOS-Zeilenende passiert dieser Effekt.

Abhilfe: Zuerst das \r aus der Datei entfernen. Und den sed brauchst Du nicht (die beiden Variablen p und m übrigens auch nicht ;-):

jan@jack:~/tmp/preise> tr -d '\r' <shop_preise1.csv | awk -F';' '{print "UPDATE products SET products_price = #"$1"# WHERE products_model = #"$2"#" }'
UPDATE products SET products_price = #3.500,00# WHERE products_model = #1.335-204.0#Jan

EDIT: Der Effekt beruht darauf, dass in $2 der Wert "1.335-204.0\r" an awk übergeben wird. Damit wird vor dem letzten # ein CR ausgeführt und das # an den Anfang der Zeile geschrieben.

D_O_Z_E_R
05-12-2007, 09:09
hi,

wie du vermutet hast kommt die datei von einem win rechner, danke für die antwort :D .