有没有办法将一个50 GB的CSV文件分割成多个CSV文件,每个文件包含1GB的数据,并确保其gzip?
我试着做
cat test.csv | split -b 1000000000g -d -a4 - output_prefix --filter='gzip > $FILE.gz'
usage: split [-l line_count] [-a suffix_length] [file [prefix]]
split -b byte_count[K|k|M|m|G|g] [-a suffix_length] [file [prefix]]
split -n chunk_count [-a suffix_length] [file [prefix]]
split -p pattern [-a suffix_length] [file [prefix]]
但它给出了一个错误。
3条答案
按热度按时间7vhp5slm1#
我认为你不能完全按大小分割,同时在最后一条记录中有一个有效的CSV,所有的单元格都填好了。
如果可能的话,你可以改变你的方法,你可以用Miller和split verb来按记录数分解它:
在输出中,您会得到split_1.csv、split_2.csv、...,每个都由1000000条记录组成。
每个都是有效的CSV。
hfwmuf9z2#
我没有完整的答案。但这是给予你原则。
我习惯于收集(与您相反)csv,或者在
grep
的帮助下从一个csv中提取样本,以创建另一个csv。所有这些任务以及您的任务的原则是首先在两个单独的临时文件中进行提取:
$header_file
,只有你的csv文件头$row_file
,包含csv的所有行,而不是标题我这样做,用**$1**你想要处理的csv文件:
然后,将
$rows_file
拆分为另一个临时文件中的部分,让我们分别调用它们:
$part_file
,然后将它们连接到有效的部分csv文件中,并使用:
包含已分隔行的每个部分。
0vvn1miw3#
不确定这是否有帮助。但我最终还是这么做了。现在我只需要弄清楚如何保存为csv.gv文件