匹配2个文件中的2列,并从第一个文件中获取另一个值

时间:2019-04-17 22:42:17

标签: awk sed grep text-processing

我有2个csv文件,其结构如下:

File 1:
date,keyword,location,page
2019-04-11,ABC,mumbai,http://www.insurers.com
and so on.

File 2:
date,site,market,location,url 
2019-05-12,denmark,de ,Frankfurt,http://lufthansa.com
2019-04-11,Netherlands,nl,amsterdam,http://www.insurers.com

问题是我需要匹配文件和url中的日期。示例:

2019-04-11 and http://www.insurers.com (File 1)
with 
2019-04-11 and http://www.insurers.com (File 2)

编辑: 如果满足此条件,则应将文件1中的关键字(ABC作为第三列(新列)插入到文件2中。

预期输出:

date,site,keyword,market,location,url
2019-04-11,Netherlands,ABC,nl,amsterdam,http://www.insurers.com

我尝试将日期和URL放入Java的地图中,但是URL重复太多。 所以我正在寻找bash,awk,grep或sed解决方案。 谢谢。

2 个答案:

答案 0 :(得分:2)

$ awk '
    BEGIN { FS=OFS="," }
    NR==FNR { m[$1,(NR>1?$4:"url")]=$2; next }
    ($1,$5) in m { $2=$2 OFS m[$1,$5]; print }
' file1 file2
date,site,keyword,market,location,url
2019-04-11,Netherlands,ABC,nl,amsterdam,http://www.insurers.com

答案 1 :(得分:0)

尝试gnu sed:

sed -En 's!^([0-9]{4}-[0-9]+-[0-9]+,).+(http://\w.+)!s#^\1([^,]+),[^,]+,\\s*\2#\\1#p!p' File2| sed -Enf - File1 >Result