内存问题:Shell脚本

时间:2014-07-07 11:55:36

标签: linux bash shell unix

我在a.csv b.csv ....

文件夹中有5个文件

我需要将这些文件合并到一个名为X.csv的文件中,以后将X.csv的内容与a,b,c等合并。

即使每个文件中只有两行,我也会收到错误消息,说明内存不足 - 基本上只复制10行。我使用以下命令:

 paste -d, *.csv >> X.csv. 

然而,当我使用

 paste -d, *.csv > X.csv

没有内存问题。然而,我不能使用,因为我以前也需要X.CSV文件的信息所以我只应该追加不编辑整个文件的内容。

有谁知道我是如何实现这一目标的?这些是','分隔的CSV文件,我不想复制多次命名列的标题(第1行)。

我使用MAC OSX Mavericks 8 GB Ram。

谢谢你:)

2 个答案:

答案 0 :(得分:2)

正如@loreb所说,*.csv也匹配X.csv。您可以使用正确的globbing variable来避免这种情况,但这取决于您的shell是否能够处理...我知道bash可以,并且您使用bash标记发布了您的问题,但是你说你使用的是Mac OSX - 嗯,我想你无论如何都可以试试。

paste -d, [a-z]*.csv >> X.csv 

这将为paste命名为a.csv的{​​{1}}命令运行z.csv,小写,因此不会X.csv,我认为这是当前的问题。

答案 1 :(得分:0)

如果您有大量数据,并且缺少跟踪[a-z].csv中最后停止处理的行号的工具(我认为不存在),您可以使用以下内容过程:

  1. 确保写入程序不再写入CSV文件。一些可行的方法:
    • 将文件移至只读文件系统。
    • 停止文件编写程序。
    • 以某种方式强制程序开始写入新的文件描述符。
  2. 如有必要,重命名或移动文件,以避免作者再次打开它们。
  3. 如有必要,请重新启动编写器。
  4. paste -d, /temporary_directory/*.csv >> /final_destination/X.csv