2017-03-29 9 views
2

Ich bin sehr neu in AWK, obwohl ich zuvor die Eingabeaufforderung/Terminal verwendet habe.AWK-Syntaxfehler bei Verwendung der IF-Anweisung

Ich habe dieses Skript unten, wo ich Teilmengen von Daten basierend auf Country Code und State Code erstellen. Aber ich bekomme einen Syntaxfehler.

BEGIN{ 
    FS = "\t" 
    OFS = "\t" 
    } 

# Subset data from the states you need for all years 
if ($5 == "IN-GA" || $5 == "IN-DD" || $5 == "IN-DN" || $5 == "IN-KA" || $5 == "IN-KL" || $5 == "IN-MH" || $5 == "IN-TN" || $5 == "IN-GJ"){ 
     if (substr($17, 1, 4) == "2000"){ 
      print $5, $12, $13, $14, $15, $16, $17, $22, $23, $24, $25, $26, $28 > "Y2000_India_sampling_output.txt" 
     } 
    } 

auf Cygwin verweise ich auf das Skript und ich führen Sie die folgenden Zeilen Code und sehen Sie die Syntaxfehler sofort:

$ gawk -f sampling_India.awk sampling_relFeb-2017.txt 
gawk: sampling_India.awk:20: gawk if ($5 == "IN-GA" || $5 == "IN-DD" || $5 == "IN-DN" || $5 == "IN-KA" || $5 == "IN-KL" || $5 == "IN-MH" || $5 == "IN-TN" || $5 == "IN-GJ"){ 
gawk: sampling_India.awk:20:  ^syntax error 

Irgendwelche Gedanken?

Antwort

2

Ihr if Zustand ist nicht in {...} Block eingeschlossen.

haben es wie folgt aus:

BEGIN { 
    FS = OFS = "\t" 
} 
# Subset data from the states you need for all years 
$5 ~ /^IN-(GA|DD|DN|KA|KL|MH|TN|GJ)$/ && substr($17, 1, 4) == "2000" { 
    print $5, $12, $13, $14, $15, $16, $17, $22, $23, $24, $25, $26, $28 > "Y2000_India_sampling_output.txt" 
} 

Beachten Sie, wie regex Sie mehrere == Bedingungen in einer einzigen Bedingung kombinieren.

+1

Danke @anubhava. Das funktioniert!. Ich bin neugierig. Wenn ich es nicht bis zum Jahr 2000 unterteilen wollte, und ich entferne die '&& substr ($ 17, 1, 4) == "2000"' - sollte ich alle Daten erhalten, die die betroffenen Staaten betreffen, richtig? Obwohl für alle Jahre? –

+0

Ja, das ist richtig – anubhava

Verwandte Themen