ich eine Textdatei mit folgendem Format haben:definieren Felder durch Leerzeichen, Anführungszeichen oder Klammern in gawk
RANDOM-WORD1 ==> "string with whitespaces" (string with whitespaces)
RANDOM-WORD2 ==> "another string" (and another)
RANDOM-WORD3 ==> "yet another string" (and another)
Ich möchte durch die gawk
Trennzeichen definieren:
- Whitespaces
- Zitate
- Klammern
Zum Beispiel Zeile 1:
$1: RANDOM-WORD1
$2: ==>
$3: "string with whitespaces"
$4: (string with whitespaces)
Ich habe gawk
‚s FPAT
manual gelesen und ich habe diese geschrieben:
FPAT = "([^[:blank:]]*)|(\"[^\"]+\")|(\([^)]+\))"
Es ist jedoch nicht für die Klammern nicht funktioniert, wie ich:
Ich habe versucht, die Klammern in der dritten Klausel zu entkommen, aber es wird auch nicht funktionieren. Ich möchte jedes Zeichen ignorieren, das kein )
in einem Paar (...)
ist. Ich weiß, dass es keine verschachtelten Klammern geben wird.
NB: Wie kann ich auch die Anführungszeichen/Klammern als Felddaten ignorieren? Zum Beispiel:
$1: RANDOM-WORD1
$2: ==>
$3: string with whitespaces
$4: string with whitespaces
Danke, das hat funktioniert. Ich habe auch den Grund dafür herausgefunden : https://stackoverflow.com/questions/11383643/groovy-why-doe-i-need-to-double-escape-square-brackets, ist es ein ähnlicher Fall? – Adama
@Adama siehe http://StackOverflow.com/a/36806066/1745001, warum du sie zweimal meiden musst, sonst kannst du '[^ [: blank:]]' durch '\\ S' ersetzen, da du sowieso gawk benutzt. –
@Adama In meinem Verständnis interpretiert 'awk' die Zeichenfolge vor dem Aufruf der Regex-Verarbeitungs-Engine. Nach den [Spezifikationen] (http://pubs.opengroup.org/onlinepubs/009695399/utilities/awk.html#tag_04_06_13_04) ist '\ (' keine gültige Escape-Sequenz, die in der Tabelle der Spezifikation aufgeführt ist. Das ist auch die Grund, warum gawk den Fehler "Warnung: Escape-Sequenz '\)' als unbehandelt ')'" anzeigt. Das '\ (' 'schafft es nie in die Regex - Engine. Um das zu erreichen, müssen Sie den umgekehrten Schrägstrich als \\ umgehen, damit er die String - Verarbeitung übergibt und die Regex - Engine' \ ('. – Guido