chia nhỏ tập tin và nén trong đường ống


3

Vì vậy, tôi có một tập tin lớn như thế này ...

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

Và tôi muốn chia nó thành một loạt các tệp nhỏ hơn dựa trên cột đầu tiên. Dễ dàng: sử dụng awk như thế này:

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

Đây là cách bắt: Tôi muốn các tệp đầu ra được nén. Vì vậy, tôi có thể tiếp tục và làm điều này sau khi thực tế ...

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

Vấn đề với điều đó là tôi muốn xz nằm trong đường ống thay vì sau khi dữ liệu được chia. Một cái gì đó như thế này:

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

Tất nhiên, điều này không thực sự phân chia tập tin.

Lý do tôi muốn nó trong đường ống là vì tôi đang tải xuống dữ liệu và muốn chạy nén cùng lúc với tải xuống thay vì sau đó. (Tôi khá chắc chắn rằng điều này sẽ khiến mọi thứ diễn ra nhanh hơn, nhưng nếu tôi sai, hãy sửa lại cho tôi)

Vì vậy, mục tiêu của tôi là một cái gì đó như ....

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

Nhưng không, bởi vì điều đó rõ ràng sẽ không hoạt động

Nếu bạn có một giải pháp tốt hơn cho vấn đề của tôi hoặc nếu bạn nghĩ rằng tôi đang làm điều gì đó hoàn toàn ngu ngốc, thì tôi linh hoạt.


và bạn muốn tất cả các tệp đầu ra được nén lại thành một tệp? Tôi nghi ngờ điều này có thể được thực hiện trong đường ống.
gogoud

Tôi muốn mỗi tệp được nén riêng lẻ thành các tệp riêng biệt
Jay

1
Tôi nghĩ awk có thể tự làm ống, xem A này để lấy cảm hứng superuser.com/a/485602/307834
Xen2050

Câu trả lời:


2

awk có thể tự làm ống "tự nhiên", giống như các chuyển hướng trong ví dụ. Tôi không phải là một chuyên gia trích dẫn awk, nhưng điều này phù hợp với ví dụ của bạn & được báo cáo là hoạt động A-OK:

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

Không, không hoạt động ... cat exfile | grep "$dates" | awk -F '[,/]' '{print > "filename"$1$2$3".dat"}' hoạt động và xuất ra nhiều tệp không nén, nhưng cat exfile | grep "$dates" | awk -F '[,/]' '{print | xz -c > "filename"$1$2$3".dat.xz"}'cung cấp cho a syntax errortại>
Jay

Ah, nhưng awk -F '[,/]' '{print | "xz -c >" "filename"$1$2$3".dat.xz"}'không hoạt động.
Jay

Nếu bạn cập nhật câu trả lời của mình, tôi sẽ đánh dấu là chính xác
Jay
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.