Я пишу сценарий, который может создать правило прокси из файла 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
и вывод оболочки
,360buy,
,baidu,
,bdstatic,
,bcebos,
,fbcdn,
,twitter,
,twimg,
rule_head и rule_tail , кажется, не работает вообще, я уже пытался напечатать ключевое слово внутри функциональной головы илиtail> если до switch / case , он может правильно напечатать ключевое слово.
Но когда я попытался напечатать rule_head или rule_tail после переключателя /регистр выводится с пометкой