Guten Morgen Ihr Helfer in der Not! Ich hab leider ein "kleines" Problem mit AWK bzw. mit dem korrekten Escapen in der Bash. Problem: "(M)" und andere sonderzeichen werden nicht in der Bash gefunden. Hier nun mein Code: #myLine enhält z.b. folgende Daten 47474-4848438-3848484(M) myKeyEscaped=`echo $myLine'$'|sed s`\/'/'\\\/'g` data=`awk -F ';' '{if ($1~/'"$myLineEscaped"'/) print $0}' $3` #$3 spezifiziert eine textdatei (csv format) in der das 1. Feld einer Zeile #"aussieht" wie "myLine". Ich seh wohl den Wald vor lauter Bäumen nicht. Wäre sehr dankbar wenn jemand eine Idee einstreuen könnte. Danke! Christian -- Christian Augustata aka Sirius sirius@mynnga.de
"Christian Augustat"
#myLine enhält z.b. folgende Daten 47474-4848438-3848484(M) myKeyEscaped=`echo $myLine'$'|sed s`\/'/'\\\/'g`
was soll mit dieser Zeile gemacht werden?
data=`awk -F ';' '{if ($1~/'"$myLineEscaped"'/) print $0}' $3`
die Variable $myLineEscaped ist nicht definiert.
#$3 spezifiziert eine textdatei (csv format) in der das 1. Feld einer Zeile #"aussieht" wie "myLine".
man kann mit der Option -v var=value einfach awk-variablen einen Wert zuweisen: bar="BAR and others" awk -v foo=$bar '..... printf "foo=%s\n", foo; ....' also das fehleranfällige '"$bar"' Konstrukt ist nicht nötig. (Zumindest beu GNU awk) Aber ich denke es ist besser mal das ganze Problem zu schildern, bevor wir diese Lösung diskutieren. Bye Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 9204871 Fax: +49(721) 24874 Juergen.Vollmer@[informatik-vollmer.de|alumni.uni-karlsruhe.de|acm.org] www.informatik-vollmer.de
Christian Augustat schrieb:
Guten Morgen Ihr Helfer in der Not!
Ich hab leider ein "kleines" Problem mit AWK bzw. mit dem korrekten Escapen in der Bash.
Problem: "(M)" und andere sonderzeichen werden nicht in der Bash gefunden.
Hier nun mein Code:
#myLine enhält z.b. folgende Daten 47474-4848438-3848484(M) myKeyEscaped=`echo $myLine'$'|sed s`\/'/'\\\/'g`
Hi, entweder bin ich doof, oder das sieht irgendwie nach murks aus, zuviele backticks, zuviele \ ? Was soll das '$' bewirken? Was soll das überhaupt? ;) Hast Du denn schon mal getestet, was dann in $myKeyEscaped steht?
data=`awk -F ';' '{if ($1~/'"$myLineEscaped"'/) print $0}' $3` Huh? wo kommt $myLineEscaped, sollte das nicht myKeyEscaped sein?
#$3 spezifiziert eine textdatei (csv format) in der das 1. Feld einer Zeile #"aussieht" wie "myLine".
Ich denke, Du kannst Dir das echo ... sed sparen, was sed kann, kann awk hier auch. Vielleicht ist es besser, wenn Du mal das Script postest. -- Gruss Bernd
Hallo, Am Tue, 03 Feb 2004, Christian Augustat schrieb:
Problem: "(M)" und andere sonderzeichen werden nicht in der Bash gefunden.
Meinst du den String "Klammer-auf, M, Klammer-zu"?
#myLine enhält z.b. folgende Daten 47474-4848438-3848484(M) myKeyEscaped=`echo $myLine'$'|sed s`\/'/'\\\/'g` ^^^^^^^peng! ^peng!
Du quotest die Zeile nicht, d.h. die bash versucht das Programm 'M' in einer subshell auszufuehren.
data=`awk -F ';' '{if ($1~/'"$myLineEscaped"'/) print $0}' $3`
Und wo kommt das nu her?
#$3 spezifiziert eine textdatei (csv format) in der das 1. Feld einer Zeile #"aussieht" wie "myLine".
==== #! /bin/bash pattern='47474-484/8438-384/8484(M)' res="`awk -F ';' -v key=\"$pattern\" ' BEGIN { key=gensub("([/()])", "\\\\\\\\\\\1", "g", key); print key > "/dev/stderr"; } $1 ~ key { print; }' \"$3\"`" echo "$res" ==== Beachte dabei wie in der Zeile res="` .. \"$v\" ...`" gequotet ist! Wie du siehst ist das so aber die Backslash-Hoelle, da der Backslash 3fach zu escapen ist. Durch eine Funktion ist es einfacher, das awk-Programm anzugeben. ==== #!/bin/bash pattern='47474-484/8438-384/8484(M)' do_awk() { awk -F ';' -v key="$1" ' BEGIN { key=gensub("([/()])", "\\\\\\1", "g", key); print key > "/dev/stderr"; } $1 ~ key { print; }' "$2" } res="`do_awk \"$pattern\" test_extr.dat`" echo "$res" ==== Noch einfacher waere es, wenn du ein awk-script erstellst. -dnh -- Erst muss mein Arzt sein ok geben. Aber er ist zuversichtlich und die Leute hier sind echt ok, der Raum hat ganz toll weiche Waende und von den bunten Tabletten sieht man ganz tollte Farben und fuehlt sich ganz ruhig. -- Jens Link
participants (4)
-
Christian Augustat
-
David Haller
-
Dr. Jürgen Vollmer
-
Illuminatus@t-online.de