2013-07-18 2 views
1

Я собираю некоторые файлы ЦС на ежедневной основе в структуре каталогов, которая выглядит как/tmp/data/$ yearmonth/$ day/$ hour. Таким образом, есть 24 каталогов внутри/TMP/данные/$ годМесяца/$ дняКошка, читающая из массива файлов

У меня есть сценарий оболочки, как это:

yearmonth=`date -d "-2 days" +%Y%m` 
day=`date -d "-2 days" +%d` 

files=() 
cd /tmp/data/$yearmonth/$day 
for i in `ls -a */*.tsv` 
do 
    files+=($i) 
done 

Файлов массив имеют все TSV файлов, хранящиеся в нем. Я хочу «cat» всех этих tsvfiles на один tsvfiles и хочу выполнить sort | uniq -c на нем. Как это сделать? Поскольку файлы tsv становятся огромными, кот может стать очень медленным. Что может быть другой альтернативой. Благодаря

+0

Что происходит с «кошкой»? –

+0

Файлы ЦС действительно огромны, а работа кошки очень медленная – user1189851

+2

Можете ли вы показать весь код? –

ответ

1

Некоторые вопросы с кодом вы показываете:

  1. Если у вас есть достаточное количество файлов или имена достаточно долго в ваших подкаталогах ls -a собирается завершаться слишком много файлов в списке аргументов. Стандартным средством является использование find

    найти/TMP/данные/год/мес/день -типа п -iname «*» .tsv -print0

  2. После того как вы найдете вы можете трубы списке файлов генерируется непосредственно в сортировку

    | xargs -0 рода --unique

Нет cat вовлеченного, но, конечно, файлы по-прежнему необходимо найти и прочитать.

Смежные вопросы