代码之家  ›  专栏  ›  技术社区  ›  Vincent

将CSV合并为一个,规模将成倍扩大

  •  0
  • Vincent  · 技术社区  · 2 年前

    我有600个大小约为1Mo的CSV文件,总共大约有600个。我想把它们都放到sqlite3数据库中。所以我的第一步就是把它们合并成一个大csv( 大约600万对吧? )在将其导入sql数据库之前。

    但是,当我运行下面的bash命令(合并所有文件并保留一个头)时:

    cat file-chunk0001.csv | head -n1 > file.csv
    for f in *.csv; do cat "`pwd`/$f" | tail -n +2 >> file.csv; done
    

    生成的文件。csv的大小为 38Go ,此时进程停止,因为设备上没有剩余空间。

    所以我的问题是:为什么合并文件的大小会比预期的大50倍以上?我该怎么做才能把它们放到一个大小合理的sqlite3数据库中呢?

    1 回复  |  直到 2 年前
        1
  •  2
  •   Stephen Darlington    2 年前

    我想我的第一个问题是:如果你知道如何进行for循环,为什么需要将所有文件合并到一个CSV文件中?你不能一个接一个地装吗?

    但你的问题是一个无限循环。你的通配符( *.csv ) 你要写的文件。您可以将输出文件放在其他目录中,或者确保文件glob不包含输出文件( for f in file-*.csv 也许吧)。