我有一个1TB csv
格式的文件
id data1 data2 ...
001 x1 y2
001 x2 y2
002 x1 y1
... ... ...
我希望每个ID都有一个文件,
[001.csv]
001 x1 y2
001 x2 y2
[002.csv]
002 x1 y1
该文件包含带引号的字符串,并且未按ID排序。我可以运行查询以预先知道所有ID。
在linux命令行或python中执行此操作的最佳方法是什么?
答案 0 :(得分:3)
在命令行上尝试-awk很棒又优雅。 (请确保以下双引号之间的空格数量正确-即id和data1之间的空格
$ awk -F" " '{print >$1".csv"}' <your_1Tb_file>
这将创建001.csv,002.csv等文件
根据有关跳过第一行的注释进行编辑-您可能会这样做。这是一个-在awk之前添加管道。
$ tail +2 <your_1Tb_file> | awk -F" " '{print >$1".csv"}'
答案 1 :(得分:-1)
这是一个可以执行您想要的操作的shell脚本。不过,我不知道要花费多长时间才能处理1TB数据。
#!/bin/bash
tail -n +2 data.csv | while read -r line; do
basename=$(echo "$line" | awk '{ print $1 }');
echo "$line" >> "$basename.csv";
done
tail -n +2
-跳过文件的第一行
while read -r line
-循环遍历文件的每一行。确保文件以换行符结尾,否则将跳过最后一行。
awk '{ print $1 }'
-获取每行的第一个字段,例如001
,002
。
echo "$line" >>
-将行连接到文件末尾。