【问题标题】:AWK syntax error while using the IF statement使用 IF 语句时出现 AWK 语法错误
【发布时间】:2017-08-23 09:14:00
【问题描述】:

虽然我以前使用过命令提示符/终端,但我对 AWK 还是很陌生。

我在下面有这个脚本,我在其中创建基于国家代码和州代码的数据子集。但我得到一个语法错误。

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"
        }
    }   

在 Cygwin 上,我参考脚本并运行以下代码行,您会立即看到语法错误:

$ 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

有什么想法吗?

【问题讨论】:

    标签: bash if-statement awk cygwin substring


    【解决方案1】:

    您的if 条件未包含在{...} 块中。

    像这样:

    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"
    }
    

    注意如何使用正则表达式将多个== 条件组合成一个条件。

    【讨论】:

    • 谢谢@anubhava。这样可行!。我好奇。如果我不想在 2000 年对其进行子集化,并且我删除了 '&& substr($17, 1, 4) == "2000" ' - 我应该获得与相关州有关的所有数据,对吧?虽然多年来?
    猜你喜欢
    • 1970-01-01
    • 2015-11-18
    • 2013-05-27
    • 2019-11-09
    • 1970-01-01
    • 2011-09-22
    • 2018-12-28
    • 2015-05-06
    • 1970-01-01
    相关资源
    最近更新 更多