Awk 基于多列匹配的文件合并
配置 服务1208000,规则1Awk 基于多列匹配的文件合并,awk,Awk,配置 服务1208000,规则1 服务2308000,规则2 文件1 价值1,价值2,服务1 |服务X |服务2,价值3,价值4208000 值1、值2、服务1、值3、值4208000 值1、值2、服务1、值3、值4, 值1、值2、servicex、值3、值4208000 值1、值2、服务2、值3、值4308000 值1、值2、服务2、值3、值4308000 价值1、价值2、服务3、价值3、价值4408000 输出 价值1,价值2,服务1 |服务X |服务2,价值3,价值4208000,规则1
服务2308000,规则2 文件1 价值1,价值2,服务1 |服务X |服务2,价值3,价值4208000
值1、值2、服务1、值3、值4208000
值1、值2、服务1、值3、值4,
值1、值2、servicex、值3、值4208000
值1、值2、服务2、值3、值4308000
值1、值2、服务2、值3、值4308000
价值1、价值2、服务3、价值3、价值4408000 输出 价值1,价值2,服务1 |服务X |服务2,价值3,价值4208000,规则1
价值1、价值2、服务1、价值3、价值4208000、规则1
value1、value2、service1、value3、value4、NORULEMATCHING
value1、value2、servicex、value3、Value4208000、NORULEMATCHING
价值1、价值2、服务2、价值3、价值4308000、规则2
价值1、价值2、服务2、价值3、价值4308000、规则2
value1、value2、service3、value3、Value4408000、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;
}
}
注:-从配置文件中,我们需要匹配file1的column3(FD之后的第一个字段作为管道)和column5中的column1和column2(合并为主键) -如果匹配,则在输出的第7列中插入配置文件的第3列 我面临的挑战是在2列的基础上创建一个数组。您可以尝试:
awk -f myawk.awk config file1
其中myawk.awk
为:
BEGIN { FS = OFS = "," }
FNR == NR {
a[$1,$2] = $3
next
}
{
split($3,plan,"|")
key=plan[1] SUBSEP $6
if( key in a){
$7 = a[key]
print $0
} else {
$7 = "NORULEMATCHING"
print $0
}
}
太棒了…现在我知道我错在哪里了。。你太棒了。@VipinChoudhary谢谢。Awk很有趣:)