目的

我想填写$ 9(预订REF),$ 20 (client)在file1.csv使用"CAMPAIGN ID"($ 5 file1.csv和file2.csv $ 1)从$ 2(预订REF)和file2.csv $ 3美元(client)拉到信息。所以,在这里我有一个基于“CAMPAIGN ID" I两个文件之间的匹配要打印file2.csv的列到file1.csv的匹配行

File1.csv

INVOICE,CLIENT,PLATFORM,CAMPAIGN NAME,CAMPAIGN ID,IMPS,TFS,PRICE,Booking Ref,client
BOB-UK,clientname1,platform_1,campaign1,20572431,5383594,0.05,2692.18,,
BOB-UK,clientname2,platform_1,campaign2,20589101,4932821,0.05,2463.641,,
BOB-UK,clientname1,platform_1,campaign3,23030494,4795549,0.05,2394.777,,
BOB-UK,clientname1,platform_1,campaign4,22973424,5844194,0.05,2925.21,,
BOB-UK,clientname1,platform_1,campaign5,21489000,4251031,0.05,2122.552,,
BOB-UK,clientname1,platform_1,campaign6,23150347,3123945,0.05,1561.197,,
BOB-UK,clientname3,platform_1,campaign7,23194965,2503875,0.05,1254.194,,
BOB-UK,clientname3,platform_1,campaign8,20578983,1522448,0.05,765.1224,,
BOB-UK,clientname3,platform_1,campaign9,22243554,920166,0.05,463.0083,,
BOB-UK,clientname1,platform_1,campaign10,20572149,118865,0.05,52.94325,,
BOB-UK,clientname2,platform_1,campaign11,23077785,28077,0.05,14.40385,,
BOB-UK,clientname2,platform_1,campaign12,21811100,5439,0.05,5.27195,,

File2.csv

CAMPAIGN ID,Booking Ref,client
20572431,ref1,1
21489000,ref2,1
23030494,ref3,1
22973424,ref4,1
23150347,ref5,1
20572149,ref6,1
20578983,ref7,2
22243554,ref8,2
20589101,ref9,3
23077785,ref10,3
21811100,ref11,3
23194965,ref12,3

所需的输出

INVOICE,CLIENT,PLATFORM,CAMPAIGN NAME,CAMPAIGN ID,IMPS,TFS,PRICE,Booking Ref,client
BOB-UK,clientname1,platform_1,campaign1,20572431,5383594,0.05,2692.18,ref1,1
BOB-UK,clientname2,platform_1,campaign2,20589101,4932821,0.05,2463.641,ref9,3
BOB-UK,clientname1,platform_1,campaign3,23030494,4795549,0.05,2394.777,ref3,1
BOB-UK,clientname1,platform_1,campaign4,22973424,5844194,0.05,2925.21,ref4,1
BOB-UK,clientname1,platform_1,campaign5,21489000,4251031,0.05,2122.552,ref2,1
BOB-UK,clientname1,platform_1,campaign6,23150347,3123945,0.05,1561.197,ref5,1
BOB-UK,clientname3,platform_1,campaign7,23194965,2503875,0.05,1254.194,ref12,3
BOB-UK,clientname3,platform_1,campaign8,20578983,1522448,0.05,765.1224,ref7,2
BOB-UK,clientname3,platform_1,campaign9,22243554,920166,0.05,463.0083,ref8,2
BOB-UK,clientname1,platform_1,campaign10,20572149,118865,0.05,52.94325,ref6,1
BOB-UK,clientname2,platform_1,campaign11,23077785,28077,0.05,14.40385,ref10,3
BOB-UK,clientname2,platform_1,campaign12,21811100,5439,0.05,5.27195,ref11,3

我已经试过

从研究,我在网上完成,这似乎是可能的使用awkjoin如何使用AWK合并两个文件?让我最近出了什么我在网上找到)。

我试过,我发现各种awk码在线,我似乎无法得到它来实现我的目标。下面是我一直在试图按摩是让我在关闭的代码和工作。在当前的代码设置,试图为我相信我可以清洗重复的client柱填充只是booking ref。有了这个代码,我能得到它填充booking ref,但它要求我CAMPAIGN ID移动到$ 1和它所作的只是替换值。

注:file1.csv交易将不会与file2.csv同步。所有行可以以不同的顺序如本例所示。

当前的代码

awk -F"," -v OFS=',' 'BEGIN { while (getline < "fil2.csv") { f[$1] = $2; } } {print $0, f[$1] }' file1.csv

有人可以证实我要去哪里错这个代码,因为我已经尝试改变在此列 - 和文件 - 没有成功?也许这只是我怎样,我理解代码本身。

分析解答

像这样:

awk 'BEGIN{FS=OFS=","} NR==FNR{r[$1]=$2;c[$1]=$3;next} NR>1{$9=r[$5];$10=c[$5]} 1' \
    file2.csv file1.csv

说明在多行的形式:

# Set input and output field delimiter to ,
BEGIN{
    FS=OFS=","
}

# Total row number is the same as the row number in file
# as long as we are reading the first file, file2.csv
NR==FNR{
    # Store booking ref and client id indexed by campaign id
    r[$1]=$2
    c[$1]=$3
    # Skip blocks below
    next
} 

# From here code runs only on file1.csv

NR>1{
    # Set booking ref and client id according to the campaign id
    # in field 5
    $9=r[$5]
    $10=c[$5]
}

# Print the modified line of file1.csv (includes the header line)
{
    print
}