我正在编写一个可以从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 时,它会输出注释。
答案 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}}例如,我在这里提到。