Grep und Awk in Windows Invalid Char Error in Expression
Ich bin neu grep und awk - unter Windows 7 (ich heruntergeladen habe, grep und awk für windows aus GnuWin).
Bin ich habe Probleme beim ausführen dieses Skripts:
grep -Fwf dictionary.txt frequency.txt | awk '{print $2 "," $1}'
Bekomme ich die Fehlermeldung:
awk: '{print
awk: ^ invalid char "' in Ausdruck
Ich glaube, es könnte etwas damit zu tun haben zu müssen doppelte Anführungszeichen verwenden, die in Windows, aber ich habe versucht, alle Kombinationen, die ich mir denken kann, und trotzdem funktioniert es nicht.
Kann jemand helfen?
Dank
- Wie wärs mit "{print $2 "","" $1}"? Auf Windows ist Sie entkommen doppelten Anführungszeichen, mit doppelten Anführungszeichen.
- Das änderte sich mit der Fehlermeldung an: awk: {print $2 ", awk: ^ unterminated string (zeigt auf das Zitat).
- Auf Windows jeder Prozess analysiert, selbst seine Befehlszeile. Mit einigen C-runtimes, doppelte Anführungszeichen werden mit backslash escaped.
- Versuchen
awk "{print $2 "","" $1}"
wenn Sie auf der cmd-Kommandozeile - Ich würde versuchen
awk "{print $2 ',' $1}"
. - Awk nicht erkennen
'
für strings 🙁
Du musst angemeldet sein, um einen Kommentar abzugeben.
Flucht Befehlszeile Elemente ist immer wieder ein Schmerz unter Windows. Als letztes Mittel könnten Sie wahrscheinlich verwenden
gawk -f
!Also: Ihre Datei
script.awk
enthält:Und Sie tun
grep -Fwf dictionary.txt frequency.txt | awk -f script.awk
{print $2 $1}
? Was passiert, wenn der Wechsel vonprint
zuprintf("%s, %s\n", $2, $1);
Unter Windows müssen Sie doppelte Anführungszeichen verwenden, um Ihr Angebot awk-Befehle. So
muss geändert werden,
Aber denken Sie daran, Sie können nicht verwenden Sie doppelte Anführungszeichen innerhalb von doppelten Anführungszeichen stehen, müssen Sie, Ihnen zu entkommen. Unter Windows kannst du nicht einfach mit \, um es zu entkommen. Sie müssen die folgende syntax:
Recht, das ist \"" zu repräsentieren, die " innerhalb von doppelten Anführungszeichen.
awk "{print $2 \",\" $1}"
Müssen Sie doppelte Anführungszeichen verwenden, um Ihre awk-Skript und die Flucht der eingebetteten Anführungszeichen in der print-Anweisung mit einem guten alten backslash: [g]awk "BEGIN {print \"Hallo escape-char!\"}"
Hier ist ein kurzes Beispiel, das akzeptieren einer Eingabe.csv , dann Ausgang
new.csv
:Da die Klammern müssen in doppelten Anführungszeichen, drei Sätze von doppelten Anführungszeichen sind erforderlich, innerhalb des eingeklammerten Ausdrucks.
Beispiel:
gawk "{print $2 """,""" $1}"
Ich habe stuggled über die Jahre zu erhalten, AWK unter windows läuft. Gibt es Probleme mit dem zitieren und Pfad-Trennzeichen. Meine endgültige Lösung ist "let AWK fly free", frei von der Befehlszeile aus. Ich verstehe, dass es wurde entwickelt als Kleber für die unix-Befehlszeile juju, aber ich wollte einfach nur verwenden Sie es als eine Skriptsprache.
Alle meine AWK-Skripte enthalten, eine Liste der Ziele und eine definierte Ausgabe-Datei. Sie können ausgeführt werden, indem Sie einen Doppelklick durch eine zugeordnete DOS-batch-Datei:
Ein Beispiel meiner AWK-Skripts wird im folgenden vorgestellt (Auszug alle Zeilen, die mit :: - Registerkarte, und drucken Sie Sie):
Können Sie sehen, dieses definiert die input-target innerhalb des Skripts definiert und für die endgültige Ausgabe Ziel innerhalb des Skripts. Es verwendet einen temp ".out" - Datei, um zu vermeiden, viele Umleitung drucken, kopieren die Datei auf den gewünschten Ausgang in der END-Abschnitt des Skripts.
Habe ich verbunden AWK-Dateien mit dieser batch-Datei und es wurde eine option Hinzugefügt, die in meinem editor zum senden von AWK-Dateien auf die batch-Datei.
Freundlichen GRÜßEN
Yousui sagte:
während ReluctantBIOSGuy hat, verwendet nur \" in seinem Beispiel.
Ich versucht, sowohl die \"" und \ " und beides funktioniert bei mir (gawk unter Windows XP sowohl auf der Kommandozeile in einer batch-Datei).
Hier ist ein Beispiel, die " in der Ausgabe (ein string-literal in c-code):