Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/114.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
awk变量分配在开关/案例下不起作用_Awk - Fatal编程技术网

awk变量分配在开关/案例下不起作用

awk变量分配在开关/案例下不起作用,awk,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":

我正在编写一个脚本,可以从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

外壳输出是

,360buy,
,baidu,
,bdstatic,
,bcebos,
,fbcdn,
,twitter,
,twimg,
rule_head和rule_tail似乎根本不起作用,我已经尝试在函数head或tail>中打印关键字,如果在切换/case之前,它可以正确打印关键字


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

请尝试更改它们。我正在驾驶,所以没有测试它,但如果代码没有任何语法问题,它应该可以工作

头部碰撞,$2,$3,尾部碰撞,$4;-->头部碰撞,2美元,3美元,尾部碰撞,4美元

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

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

@乔舒利。在双引号内提及任何内容意味着我们提及价值,如果您想要有一个变量并为其赋值,请使用var=bla,或者您想要直接传递任何不带变量的值,然后使用print bla,例如我在这里提到的。

您能否在帖子中也提到预期输出?@RavinderSingh13我的预期输出,exception.csv最后一行的示例应该是-DOMAIN-KEYWORD,twimg,USA_Oregon。您需要在headclash、$2、$3、tailclash、$4中的每一行引用clash。您有一个打字错误规则_head@JoshuaLee,yes clash表示正在传递字符串,clash表示正在传递名为clash的变量。我在回答中提到了两种解决方案,第一种是通过传递字符串,第二种是通过使用变量并在函数中传递它。@Joshua,为了完整起见,在awk中,当您使用未初始化的变量时,awk将根据上下文将其处理为空字符串或数字零。
head(value, $2), $3 ,tail(value, $4);