如何将大型CSV文件处理为较小的CSV文件,然后将所有文件合并为一个CSV文件

时间:2015-02-25 19:39:38

标签: r csv

我有超过400个大小超过400 MB的500个excel文件都有相同的标题。我想将文件拆分为每个文件中1000行的多个文件。将文件拆分为多个文件后,我想将1000行文件的前400个文件合并到一个文件中。

2 个答案:

答案 0 :(得分:3)

我认为您需要删除所有标题(即使用sed删除第1行)并将结果拆分为1,000行的文件,其名称以<originalfile>-chunk...开头:

for f in *.csv; do sed '1d' "$f" | split -l 1000 - "$f-chunk-" ; done

d中的sed命令表示“删除指定的行”。如果原始文件名为1.csv2.csv,则您现在将拥有名为

的文件
1.csv-chunk-aa    # first 1000 lines of 1.csv
1.csv.chunk-ab    # second 1000 lines of 1.csv
2.csv-chunk-aa    # first 1000 lines of 2.csv
2.csv-chunk-ab    # second 1000 lines of 2.csv 

如果您想将所有原始文件的所有第一块连接到一个新文件中,并将所有原始文件的所有第二块连接到第二个文件中,依此类推......

for f in *-chunk-* ; do 
   echo $f
done |sed 's/.*chunk-//' | sort | uniq | { i=0; while read x; do 
   cat *chunk-$x > reassem-$i
   ((i++))
done }

这将为reassem-0提供每个文件的前1000行,reassem-1以及每个文件的第二行1000行。

如果您希望所有原始CSV的所有行都放在一个没有任何标题的单个大输出文件中,请执行以下操作:

for f in *.csv; do sed '1d' "$f"; done > BigBoy.csv

答案 1 :(得分:0)

我可能会在弄乱它们之前尝试将它们转换为csv。我过去曾使用xlsx2csv来做到这一点。使用R,我已经完成了:

system(paste0('xlsx2csv -s 3 ', data_source, '" output.csv'))

也许你循环使用你的文件并使用该函数转换它们。然后对csv文件执行任何操作。