Então eu tenho um arquivo enorme algo assim ...
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
E eu quero dividi-lo em um monte de arquivos menores com base na primeira coluna. Fácil: use o awk assim:
awk -F '[,/]' '{print > filename$1$2$3".dat"}'
Aqui está o problema: eu quero que os arquivos de saída sejam compactados. Então, eu poderia ir em frente e fazer isso depois do fato ...
find . -name "filename*.dat" | xargs -l xz
O problema é que eu quero que o xz esteja no pipeline em vez de depois que os dados sejam divididos. Algo parecido com isto:
curl "url" | grep "blah" | xz -c > filename.dat.xz
Claro, isso não divide o arquivo.
A razão pela qual eu quero isso no pipeline é porque estou baixando os dados e quero executar a compactação ao mesmo tempo que o download, em vez de depois. (Tenho certeza que isso faria as coisas irem mais rápido, mas se eu estiver errado, corrija-me)
Então, meu objetivo é algo como ....
curl "url" | grep "blah" | awk -F '[,/]' '{print > filename$1$2$3".dat"}' | xz -c > filename.dat.xz
Mas não, porque obviamente isso não funcionará
Se você tiver uma solução melhor para o meu problema ou se achar que estou fazendo algo completamente estúpido, sou flexível.