Итак, у меня есть массивный файл примерно так ...
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 '[,/]' '{print > filename$1$2$3".dat"}'
Вот подвох: я хочу, чтобы выходные файлы были сжаты. Итак, я мог бы пойти дальше и сделать это после факта ...
find . -name "filename*.dat" | xargs -l xz
Проблема в том, что я хочу, чтобы xz был в конвейере, а не после разделения данных. Что-то вроде этого:
curl "url" | grep "blah" | xz -c > filename.dat.xz
Конечно, это на самом деле не разбивает файл.
Причина, по которой я хочу это в конвейере, заключается в том, что я загружаю данные и хочу выполнить сжатие одновременно с загрузкой, а не после. (Я почти уверен, что это ускорит процесс, но если я ошибаюсь, поправьте меня)
Итак, моя цель что-то вроде ....
curl "url" | grep "blah" | awk -F '[,/]' '{print > filename$1$2$3".dat"}' | xz -c > filename.dat.xz
Но нет, потому что это, очевидно, не будет работать
Если у вас есть лучшее решение моей проблемы или если вы думаете, что я делаю что-то совершенно глупое, я гибок.