2014-07-07 6 views
0

У меня есть 5 файлов в папке a.csv b.csv ....Проблемы памяти: Shell Scripting

мне нужно, чтобы объединить эти файлы в один файл с именем X.csv и в дальнейшем поддерживать слияние содержимого X.csv с a, b, c и т. Д.

Даже с двумя строками в каждом файле у меня есть сообщение об ошибке, в котором говорится, что памяти недостаточно - по существу, она копирует только 10 строк. Im, используя следующую команду:

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

Однако, когда я использую

paste -d, *.csv > X.csv 

Там нет никаких проблем с памятью. Это, однако, я canont использовать, так как мне нужна информация о файле X.CSV ранее, поэтому я должен только добавлять не редактировать содержимое всего файла.

Кто-нибудь знает, как я это достигаю? Это «,» разделенные CSV-файлы, и я бы хотел не копировать заголовок (строка 1), который называет столбцы более одного раза.

Я использую MAC OSX Mavericks 8 GB Ram.

Спасибо :)

+0

Пожалуйста, покажите нам a.csv и b.csv и X.csv –

+0

Спасибо, но у меня есть проблема с памятью с кошкой. cat * .csv> X.csv. Я не могу использовать a ..., так как некоторые файлы имеют несколько разные имена, но всего 5 файлов. – user2233834

+0

Я думаю, что у вас может быть странный файл. Попробуйте 'ls -al' и посмотрите, есть ли что-то большое и странное! Повторите попытку перезагрузки. –

ответ

0

Если у вас есть много данных, и в отсутствие инструмента, который отслеживает номер строки, в которой обработка последней остановки в [a-z].csv (который я не думаю, что существует) вы можете использовать следующий процесс:

  1. Убедитесь, что программа записи больше не собирается записывать в файлы CSV. Некоторые возможные способы сделать это:
    • Переместить файлы в файловую систему только для чтения.
    • Остановите программу записи файлов.
    • Как-то заставляют программу начинать запись в новый дескриптор файла.
  2. Переименуйте или переместите файлы, если необходимо, чтобы авторы не открывали их снова.
  3. При необходимости перезапустите автору.
  4. paste -d, /temporary_directory/*.csv >> /final_destination/X.csv
2

Как сказал @loreb, *.csv является соответствие X.csv, а также. Вы можете избежать этого, используя правильный globbing variable, но это зависит от того, может ли ваша оболочка справиться с этим ... Я знаю, что bash может, и вы отправили свой вопрос с тегом bash, но вы сказали, что используете Mac OSX - ну, я Думаю, вы все равно можете попробовать.

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

Это будет работать paste команду для файлов с именами из a.csv в z.csv, в нижнем регистре, поэтому он не будет принимать X.csv, который я думаю, это текущая проблема.

+1

Я не понимаю, что вы намерены подразумевать в OS X и bash. OS X поставляется с более старой версией bash, но у нее все еще есть extglob. 'shopt -s extglob; paste -d,! (X) .csv >> X.csv' – kojiro

+1

@kojiro, я не пользователь OS X, поэтому я не уверен, что это нормально для его оболочки или нет ... так что лучше попробуйте, чем нет, но я не подразумевал что-то плохое, кстати :) Спасибо за разъяснение этого для меня;) –