如何合并两个 CSV 文件?

如何合并两个 CSV 文件?

假设您有一个包含 2 个字段的 CSV 文件:ID 和电子邮件。您还有另一个包含 2 个字段的文件:电子邮件和姓名。您如何生成一个包含所有三个字段并包含电子邮件的文件?

答案1

修订版3

您必须按字母顺序对电子邮件的两个列表进行排序,然后将其合并。假设电子邮件字段是 file1 的第 2 个字段和 file2 的第 1 个字段:

sort -t , -k 2,2 file1.csv > sort1.csv
sort -t , -k 1,1 file2.csv > sort2.csv
join -t , -1 2 -2 1 sort1.csv sort2.csv > sort3.csv

参数含义

-t , :',' 是字段分隔符
-k 2,2 :按第二个字段进行字符排序
-k 1,1 :按第一个字段进行字符排序
-1 2 :文件 1,第 2 字段
-2 1 :文件 2,第 1 个字段
> :输出到文件

生产

电子邮件,ID,姓名
电子邮件,ID,姓名
...

按照电子邮件的字母顺序排序。

请注意,如果任一文件中缺少任何电子邮件,它将从结果中删除。

答案2

使用工具

csvjoin -c email id_email.csv email_name.csv

或者

csvjoin -c 2,1 id_email.csv email_name.csv

答案3

或许这有些小题大做,但您可以将其作为两种表导入数据库(例如 OpenOffice Base)并定义所需输出的报告。

如果 CSV 导入有问题,可以使用电子表格程序(例如 OpenOffice Calc)进行导入。然后可以轻松将结果传输到数据库。

答案4

使用 Go:https://github.com/chrislusf/gleam

package main

import (
    "flag"
    "os"

    "github.com/chrislusf/gleam"
    "github.com/chrislusf/gleam/source/csv"
)

var (
    aFile = flag.String("a", "a.csv", "first csv file with 2 fields, the first one being the key")
    bFile = flag.String("b", "b.csv", "second csv file with 2 fields, the first one being the key")
)

func main() {

    flag.Parse()

    f := gleam.New()
    a := f.Input(csv.New(*aFile))
    b := f.Input(csv.New(*bFile))

    a.Join(b).Fprintf(os.Stdout, "%s,%s,%s\n").Run()

}

相关内容