web-dev-qa-db-ja.com

パイプラインにおけるファイル分割と圧縮

だから私はこのような何か何かを大規模なファイルを持っています...

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
 _

しかし、それは明らかにうまくいかないからです

あなたが私の問題をより良い解決策を持っているならば、またはあなたが私が完全に愚かな何かをしていると思うならば、私は柔軟です。

3
Jay

例のリダイレクトと同じように、AWKは「ネイティブに」それ自体をパイプすることができます。私は厄介な専門家ではありませんが、これはあなたの例に一致しています&work a-ok:

awk -F '[,/]' '{print | "xz -c >" filename$1$2$3".dat.xz"}'
 _
2
Xen2050