Awk 两个文件之间的vlookup函数,并在下线附加匹配项

Awk 两个文件之间的vlookup函数,并在下线附加匹配项,awk,vlookup,text-processing,Awk,Vlookup,Text Processing,需要从具有多个条目的两个不同文件进行vlookup: cat file1.csv aaaaaaa;24/09/2018;06/09/2018;1;89876768 bbbbbbb;15/09/2018;03/09/2018;2;76958489 ccccccc;10/09/2018;28/08/2018;3;57848472 ddddddd;22/09/2018;08/09/2018;4;17929730 eeeeeee;19/09/2018;30/08/2018;5;18393770 cat

需要从具有多个条目的两个不同文件进行vlookup:

cat file1.csv

aaaaaaa;24/09/2018;06/09/2018;1;89876768
bbbbbbb;15/09/2018;03/09/2018;2;76958489
ccccccc;10/09/2018;28/08/2018;3;57848472
ddddddd;22/09/2018;08/09/2018;4;17929730
eeeeeee;19/09/2018;30/08/2018;5;18393770
cat文件2.csv

20180901;abc;1
20180901;sdf;2
20180904;jhh;2
20180905;skf;3
20180911;asf;2
20180923;ghf;4
20180925;asb;4
20180918;mnj;3
除file1.csv外,第四列是file2.csv中第三列的标识符

所需输出为:

aaaaaaa;24/09/2018;06/09/18;1;89876768;20180901
bbbbbbb;15/09/2018;03/09/18;2;76958489;20180901;20180904;20180911
ccccccc;10/09/2018;28/08/18;3;57848472;20180905;20180918
ddddddd;22/09/2018;08/09/18;4;17929730;20180923;20180925
eeeeeee;19/09/2018;30/08/18;5;18393770;unknown

你能试试下面的吗

awk 'BEGIN{FS=OFS=";"}FNR==NR{a[$NF]=a[$NF]?a[$NF] OFS $1:$1;next} {print ($4 in a)?$0 OFS a[$4]:$0 OFS "unknown"}' file2.csv  file1.csv
输出如下

aaaaaaa;24/09/2018;06/09/2018;1;89876768;20180901
bbbbbbb;15/09/2018;03/09/2018;2;76958489;20180901;20180904;20180911
ccccccc;10/09/2018;28/08/2018;3;57848472;20180905;20180918
ddddddd;22/09/2018;08/09/2018;4;17929730;20180923;20180925
eeeeeee;19/09/2018;30/08/2018;5;18393770;unknown
代码说明:


我们总是建议你在你的帖子中向我们展示你为解决问题所付出的努力。然后给它一个时间,并选择一个答案作为正确答案的所有答案太关闭线程。当然,我会记住这一点,为下一次。谢谢。我的代码是:awk-F“\”\“-vOFS=”;“NR==FNR{a[$4]=$1 OFS;next}$3 in a{a[$1]=a[$1](a[$1]~/;$/?:“;”)$4}END{for(i in a)print i,a[i](a[i]~/;$/?“不可用”):“}”OFS=';“;”file1.csv file2.csvSure,你可以努力更新你的帖子,理想情况下应该是这样的,评论不是为了这个。嗨@RavinderSingh13伟人!很好用。非常感谢你的回答和解释。
awk '
BEGIN{                                              ##Starting BEGIN section for awk here.
  FS=OFS=";"                                        ##Setting values for FS and OFS as semi colon.
}                                                   ##Closing block for BEGIN section here.
FNR==NR{                                            ##Checking condition FNR==NR which will be TRUE when first Input_file named file2.csv is being read.
  a[$NF]=a[$NF]?a[$NF] OFS $1:$1                    ##Creating an array named a whose index is $NF and value is $1 and concatenating its own value with same index.
  next                                              ##next will skip all further statements from here.
}                                                   ##Closing block for FNR==NR condition here.
{
  print ($4 in a)?$0 OFS a[$4]:$0 OFS "unknown"     ##These statements will execute when 2nd Input_file is being read and printing value of $0 with condition if $4 is present in array a then concatenate its value with current line else concatenate unknown with it.
}' file2.csv  file1.csv                             ##Mentioning Input_file names here.