awk变量分配在开关/案例下不起作用
我正在编写一个脚本,可以从csv文件创建代理规则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":
#!/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);