在开关/大小写的情况下,awk变量分配不起作用

时间:2019-02-26 14:38:39

标签: awk

我正在编写一个可以从csv文件创建代理规则的脚本。

#!/usr/bin/env bash

awk -F', ' '
  function head (soft, keyword) {
    if (soft == "clash") {
      switch (keyword) {
        case "HOST":
          rule_head = "- DOMAIN";
          break;
        case "KEYWORD":
          rule_head = "- DOMAIN-KEYWORD";
          break;
        case "SUFFIX":
          rule_head = "- DOMAIN-SUFFIX";
          break;
        case "IP-CIDR":
          rule_head = "- IP-CIDR";
          break;
      }
    } else
    if (soft == "quant") {
      switch (keyword) {
        case "HOST":
          rule_head = "HOST";
          break;
        case "KEYWORD":
          rule_head = "HOST-KEYWORD";
          break;
        case "SUFFIX":
          rule_head = "HOST-SUFFIX";
          break;
        case "IP-CIDR":
          rule_head = "IP-CIDR";
          break;
      }
    }
    ruturn rule_head;
  }

  function tail (soft, keyword) {
    if (soft == "clash") {
      switch (keyword) {
        case "REJECT":
          rule_tail = "REJECT";
          break;
        case "DIRECT":
          rule_tail = "DIRECT";
          break;
        case "jp_proxy":
          rule_tail = "Japan_Tokyo";
          break;
        case "us_proxy":
          rule_tail = "USA_Oregon";
          break;
        case "kr_proxy":
          rule_tail = "Korea_Seoul";
          break;
      }
    } else
    if (soft == "quant") {
      switch (keyword) {
        case "REJECT":
          rule_tail = "REJECT";
          break;
        case "DIRECT":
          rule_tail = "DIRECT,no-resolve";
          break;
        case "jp_proxy":
          rule_tail = "Japan - Tokyo";
          break;
        case "us_proxy":
          rule_tail = "USA - Oregon";
          break;
        case "kr_proxy":
          rule_tail = "Korea - Seoul";
          break;
      }
    }
    return rule_tail;
  }

  {
    if (NR>2) {
      printf "%s,%s,%s\n", head(clash, $2), $3 ,tail(clash, $4);
    }
  }
' Resources/exception.csv

和文件 Resources / exception.csv

# group, type, basis, action, comment

china_list, KEYWORD, 360buy, DIRECT, No_comment
china_list, KEYWORD, baidu, DIRECT, No_comment
china_list, KEYWORD, bdstatic, DIRECT, No_comment
china_list, KEYWORD, bcebos, DIRECT, No_comment
proxy_list, KEYWORD, fbcdn, us_proxy, No_comment
proxy_list, KEYWORD, twitter, us_proxy, No_comment
proxy_list, KEYWORD, twimg, us_proxy, No_comment

shell输出为

,360buy,
,baidu,
,bdstatic,
,bcebos,
,fbcdn,
,twitter,
,twimg,

rule_head rule_tail 似乎根本不起作用,我已经尝试在 function head或tail> if 中在前打印关键字em> switch / case ,它可以正确显示关键字。

但是当我尝试在开关/案例后打印 rule_head或rule_tail 时,它会输出注释。

1 个答案:

答案 0 :(得分:1)

您能否尝试更改其中一个(我在开车,所以没有测试它,但是如果您的代码没有任何语法问题,它应该可以工作)

head(clash, $2), $3 ,tail(clash, $4); ----> head("clash", $2), $3 ,tail("clash", $4);

或者您可以使用awk -v value="clash"创建一个变量,以使其仅保持变量格式。然后提及:

head(value, $2), $3 ,tail(value, $4);

@JoshuaLee。在"中用双引号引起来意味着我们是在提及值,如果您想拥有一个变量并使用var="bla"为其赋值,或者您想直接传递没有变量的任何值,则使用print {{ 1}}例如,我在这里提到。