【发布时间】:2018-06-09 11:40:57
【问题描述】:
我正在尝试使用 awk 根据日期将大型 CSV 拆分为较小的文件。尽管它返回“打开的文件过多”错误,但我的基本命令仍在工作。因此,我已阅读以关闭文件,但写入的命令在每个文件仅写入一行后将其关闭。
awk -F' ' '{close($1".csv")}{print > ($1".csv")}' 2015full.csv
此外,我想为每个拆分文件和一个索引列添加一个标题行。我的数据如下:
2015full.csv
2015-12-24 18:20:57 -87.2788204 36.5984675 0
2015-12-24 18:20:42 -87.2784049 36.597298699999996 0
2015-12-24 18:20:26 -87.274402 36.5932405 0
2015-12-23 18:20:10 -87.25762519999999 36.572330400000006 0
2015-12-23 18:19:40 -87.25762519999999 36.572330400000006 0
2015-12-23 18:19:21 -87.25762519999999 36.572330400000006 0
我正在努力得到:
2015-12-24.csv
num date time lon lat
1 2015-12-24 18:20:57 -87.2788204 36.5984675
2 2015-12-24 18:20:42 -87.2784049 36.597298699999996
3 2015-12-24 18:20:26 -87.274402 36.5932405
2015-12-23.csv
num date time lon lat
1 2015-12-23 18:20:10 -87.25762519999999 36.572330400000006
2 2015-12-23 18:19:40 -87.25762519999999 36.572330400000006
3 2015-12-23 18:19:21 -87.25762519999999 36.572330400000006
我可能有以下正确的部分:
awk -F' ' 'NR==1{print “num”, $0; “date”, $1; “time”, $2; “lon”, $3; “lat”, $4; next}{print (NR-1), $0}{close($1".csv")}{print > ($1".csv")}' 2015full.csv
但它们的顺序不是为我的目的创建一个工作命令。有人对我有什么建议吗?谢谢!
【问题讨论】:
-
如果文件已排序,请在到达新日期之前不要关闭文件。如果未排序,请考虑对其进行排序。