разбиение и сжатие файлов в конвейере

363
Jay

Итак, у меня есть массивный файл примерно так ...

1/20/2016,somerandomdata 1/20/2016,somerandomdata 1/20/2016,somerandomdata 1/20/2016,somerandomdata 1/21/2016,somerandomdata 1/21/2016,somerandomdata 1/21/2016,somerandomdata 1/21/2016,somerandomdata 1/22/2016,somerandomdata 1/22/2016,somerandomdata 1/22/2016,somerandomdata 1/22/2016,somerandomdata 

И я хочу разбить его на несколько файлов меньшего размера на основе первого столбца. Легко: используйте awk вот так:

awk -F '[,/]' '' 

Вот подвох: я хочу, чтобы выходные файлы были сжаты. Итак, я мог бы пойти дальше и сделать это после факта ...

find . -name "filename*.dat" | xargs -l xz 

Проблема в том, что я хочу, чтобы xz был в конвейере, а не после разделения данных. Что-то вроде этого:

curl "url" | grep "blah" | xz -c > filename.dat.xz 

Конечно, это на самом деле не разбивает файл.

Причина, по которой я хочу это в конвейере, заключается в том, что я загружаю данные и хочу выполнить сжатие одновременно с загрузкой, а не после. (Я почти уверен, что это ускорит процесс, но если я ошибаюсь, поправьте меня)

Итак, моя цель что-то вроде ....

curl "url" | grep "blah" | awk -F '[,/]' '' | xz -c > filename.dat.xz 

Но нет, потому что это, очевидно, не будет работать

Если у вас есть лучшее решение моей проблемы или если вы думаете, что я делаю что-то совершенно глупое, я гибок.

3
и вы хотите, чтобы все выходные файлы были сжаты обратно в один файл? Я сомневаюсь, что это может быть сделано в трубопроводе. gogoud 8 лет назад 0
Я хотел бы, чтобы каждый файл был отдельно сжат в отдельные файлы Jay 8 лет назад 0
Я думаю, что awk может сделать трубы сам, см. Это для вдохновения http://superuser.com/a/485602/307834 Xen2050 8 лет назад 1

1 ответ на вопрос

2
Xen2050

awk может создавать каналы "изначально", как перенаправления в примере. Я не являюсь экспертом по цитированию в awk, но это соответствует вашему примеру и работает нормально.

awk -F '[,/]' '' 
Нет, не работает ... `cat exfile | grep "$ даты" | awk -F '[, /]' '' `работает и выводит несколько несжатых файлов, но` cat exfile | grep "$ даты" | awk -F '[, /]' ' '`дает` синтаксическую ошибку` в `>` Jay 8 лет назад 0
Ах, но `awk -F '[, /]' ' '`работает. Jay 8 лет назад 0
Если вы обновите свой ответ, я отмечу его как правильный Jay 8 лет назад 0

Похожие вопросы