sed:根据变量匹配将一个 CSV 的内容合并到另一个

sed: to merge contents of one CSV to another based on variable match

正在尝试将来自一个 CSV 的 GEO IP 数据关联到另一个 CSV 的访问日志。

示例数据行:

CSV1

Bob,App1,8-Jan-15,8.8.8.8
April,App3,2-Jan-15,5.5.5.5
George,App2,1-Feb-15,8.8.8.8

CSV2

8.8.8.8,US,United States,CA,California,Mountain View,94040,America/Los_Angeles
5.5.5.5,US,United States,FL,Florida,Miami

我想在 CSV1 中搜索 CSV2 中列出的任何 IP,并在 IP 匹配时将字段 1、2、4 附加到 CSV1。

到目前为止我有,但我相信在 SED 部分出现了错误。

    #!/bin/bash

for LINE in $( cat CSV2 | awk -F',' '{print  ","  "," }' )
do
        $IP = $( echo $LINE | cut -d, -f1 )
        sed -i.bak "s/"$IP/\""$LINE\"" CSV1
done

期望的输出:

Bob,App1,8-Jan-15,8.8.8.8,United States,CA
Dawn,App3,2-Jan-15,5.5.5.5,United States,FL
George,App2,1-Feb-15,8.8.8.8,United States,CA

使用join命令:

$ join -t , -1 4 -2 1 -o 1.1,1.2,1.3,1.4,2.3,2.4 <(sort -t, -k4,4 CSV1) <(sort -t, CSV2)
Bob,App1,8-Jan-15,8.8.8.8,United States,CA

在这里使用 sort 有点矫枉过正,但是对于 >1 行文件,join 需要根据连接键对文件进行排序

使用 awk

$ awk -F, -v OFS=, 'NR == FNR {a[] =  OFS ; next}  in a {print [=11=], a[]}' CSV2 CSV1
Bob,App1,8-Jan-15,8.8.8.8,United States,CA