The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Как профессионально решить проблему слияния большого колич. ..."
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Как профессионально решить проблему слияния большого колич. ..."
Сообщение от Dmitry_Turin emailИскать по авторуВ закладки on 15-Фев-04, 02:18  (MSK)
Как профессионально решить проблему слияния очень большого количесва текстовых файлов в один, на UNIX-системе?

Задача: (пример)
Объеденить в один большой файл, файлы из 100 разных папок. Каждая папка содержит по 1000 файлов с массивом кода и текста.

(Ясно что, cat file1 file2 file3 .... > result
в этом случае не очень практично).

При этом содежание одного файла не должно "наползать" на содержание другого. Т.е. нужно строго построчное слияние, что бы каждый новый файл добавлялся к основному с новой строки.

И будет ли иметь значение общий тип объединяемых файлов, т.е.  ascii/binary ?

Заранее спасибо.
Прошу прощения, если вопрос слишком простой для этого форума.

С уважением, Дмитрий.

ICQ: 174677598
agdm79@mail.ru

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Как профессионально решить проблему слияния большого колич. ..."
Сообщение от sas emailИскать по авторуВ закладки on 15-Фев-04, 11:12  (MSK)
>Как профессионально решить проблему слияния очень большого количесва текстовых файлов в один,
>на UNIX-системе?
>
>Задача: (пример)
>Объеденить в один большой файл, файлы из 100 разных папок. Каждая папка
>содержит по 1000 файлов с массивом кода и текста.
>
>(Ясно что, cat file1 file2 file3 .... > result
>в этом случае не очень практично).
>
>При этом содежание одного файла не должно "наползать" на содержание другого. Т.е.
>нужно строго построчное слияние, что бы каждый новый файл добавлялся к
>основному с новой строки.
>
>И будет ли иметь значение общий тип объединяемых файлов, т.е.  ascii/binary
>?
>
>Заранее спасибо.
>Прошу прощения, если вопрос слишком простой для этого форума.
>
>С уважением, Дмитрий.
>
>ICQ: 174677598
>agdm79@mail.ru

ну например на bash ( все файлы из списка директорий рекурсивно):

res_file="my_result_file"
rm $res_file
dirs="dir1 dir2 dir3 dir4"
for d in $(echo $dirs); do
   echo "dir=[$d]"
   for f in $(find $d -type f); do
      echo "      file=[$f]"
      cat $f>>$res_file
      echo -e "\n\n== разделитель at `date`==\n\n" >>$res_file
   done
done

А можно на чем угодно.

Код не тестировался, так что ошибки и очепятки :) не исключены

Успехов
--- sas

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Как профессионально решить проблему слияния большого колич. ..."
Сообщение от vt Искать по авторуВ закладки on 15-Фев-04, 17:16  (MSK)
Если все "папки" - в path, и в "папках" - только нужные файлы,
то что-нибудь вроде
ls path/*/* | xargs cat > file

"Профессионально" или нет - не знаю :)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Как профессионально решить проблему слияния большого колич. ..."
Сообщение от uldus Искать по авторуВ закладки on 15-Фев-04, 21:16  (MSK)
>ls path/*/* | xargs cat > file

Звездочек не хватит, вмесле размер буффера под аргументы командной строки ограничен. 500 файлов еще пройдет, а несколько тысяч уже нет.
Нужно использовать find.

find path/ -type f -exec cat {} >> /not_path/file \;

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Как профессионально решить проблему слияния большого колич. ..."
Сообщение от vt Искать по авторуВ закладки on 16-Фев-04, 17:15  (MSK)
>>ls path/*/* | xargs cat > file
>
>Звездочек не хватит, вмесле размер буффера под аргументы командной строки ограничен. 500
>файлов еще пройдет, а несколько тысяч уже нет.

Проверим ? :)

$awk '
BEGIN{for(i=10;i<100;i++){
  system("mkdir "i)
  for(j=10;j<100;j++)system("echo "i"/"j" >"i"/"j)
}}'

$ls */* | xargs cat > file

$wc file
8100    8100   48600 file

  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "Как профессионально решить проблему слияния большого колич. ..."
Сообщение от uldus Искать по авторуВ закладки on 17-Фев-04, 20:48  (MSK)
>Проверим ? :)
>$ls */* | xargs cat > file

bash: /bin/ls: too many arguments
tcsh: argument list too long

Это очень сильно зависит от используемого шела.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "Как профессионально решить проблему слияния большого колич. ..."
Сообщение от vt Искать по авторуВ закладки on 18-Фев-04, 12:20  (MSK)
>>Проверим ? :)
>>$ls */* | xargs cat > file
>
>bash: /bin/ls: too many arguments
>tcsh: argument list too long
>
>Это очень сильно зависит от используемого шела.

Это шутка была, в ответ на "500 файлов"
(у меня в bash-e буфер expansions - 128K).
Вообще-то, с конструкцией ls */* |xargs cat
я перемудрил - то же самое просто cat */*
(упрощал привычное ls -lR ... |awk ... |xargs ...
не хватает все-таки в find-e regexp-ов)
А вот find -exec и {} я раньше не пользовался - спасибо за идею.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Как профессионально решить проблему слияния большого колич. ..."
Сообщение от Dmitry_Turin emailИскать по авторуВ закладки on 15-Фев-04, 23:16  (MSK)
Благодаря такому обилию советов проблема наконец-то решена. Всем огромное спасибо! :)
Если только смогу чем-то отблагодарить или быть полезным, пожалуйста обращайтесь.

"Реклама, хостинг, выделенные сервера любой конфигурации по очень низким ценам".

С уважением, Дмитрий.
--
ICQ: 174677598
agdm79@mail.ru

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру