管道中的文件分割和压缩

管道中的文件分割和压缩

所以我有一个像这样的庞大文件......

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

但不是,因为这显然行不通

如果您对我的问题有更好的解决方案,或者您认为我做的某件事情完全愚蠢,我会灵活处理。

答案1

awk 本身可以“原生”执行管道,就像示例中的重定向一样。我不是 awk 引用专家,但这与您的示例相匹配并且据报道可以正常工作:

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

相关内容