【发布时间】:2013-12-02 16:56:48
【问题描述】:
配置
service1,208000,rule1
服务2,308000,规则2
文件1
value1,value2,service1|servicex|service2,value3,value4,208000
value1,value2,service1,value3,value4,208000
价值 1,价值 2,服务 1,价值 3,价值 4,
value1,value2,servicex,value3,value4,208000
价值1,价值2,服务2,价值3,价值4,308000
价值1,价值2,服务2,价值3,价值4,308000
value1,value2,service3,value3,value4,408000
输出
value1,value2,service1|servicex|service2,value3,value4,208000,rule1
value1,value2,service1,value3,value4,208000,rule1
value1,value2,service1,value3,value4,,NORULEMATCHING
value1,value2,servicex,value3,value4,208000,NORULEMATCHING
value1,value2,service2,value3,value4,308000,rule2
value1,value2,service2,value3,value4,308000,rule2
value1,value2,service3,value3,value4,408000,NORULEMATCHING
我尝试了以下方法:
awk -f myawk.awk config file1
myawk.awk 在哪里
BEGIN { FS = OFS = "," }
FNR == NR {
servicename=$1;
qos=$2;
$1 = "";
$2 = "";
a[servicename,qos] = $0;
next
}
{
split($3,plan,"|");
if(plan[1]","$6 in a){
split(a[plan[1]","$6],ruledesc,",");
$7 = ruledesc[3];
print $0;
}
else {
$7 = NORULEMATCHING;
print $0;
}
}
注意:
- 从配置文件中,我们需要从文件1的第3列(FD后的第一个字段作为管道)和第5列匹配第1列和第2列(组合为主键)
- 如果匹配,则在输出的第 7 列中插入配置文件的第 3 列
我面临的挑战是在 2 列的基础上创建一个数组。
【问题讨论】:
标签: awk