2011-11-04 34 views
5

Có thể gọi song song gnu theo cách nó sẽ lặp lại dòng đầu tiên của đầu vào gốc tới STDIN của mỗi công việc con không?xử lý tệp CSV có tiêu đề với gnu song song

Tôi có tệp CSV chứa dòng tiêu đề ở trên cùng. Ví dụ:

> cat large.csv 
id,count 
abc,123 
def,456 

Tôi có một công cụ có thể trích xuất các cột theo tên chứ không phải vị trí:

> csv_extract large.csv count 
123 
456 

tôi có thể tóm tắt các giá trị nối tiếp như:

> csv_extract large.csv count | awk '{ SUM += $1 } END { print SUM }' 
579 

Các thực tập tôi có lớn hơn nhiều, và hoạt động phức tạp hơn tổng hợp, nhưng các nguyên tắc tương tự sẽ áp dụng. Tôi muốn sử dụng gnu song song để xử lý tệp, nhưng tôi không biết liệu có thể nói với gnu song song để lặp lại tiêu đề CSV cho mỗi công việc hay không.

Lý tưởng nhất là tôi có thể chạy các hoạt động với một cái gì đó như:

> cat large.csv | parallel --pipe --repeat-first-line "csv_extract /dev/stdin count | awk '{ SUM += $1 } END { print SUM }'" 
579 

Tôi đã thực hiện lên --repeat-đầu-line tùy chọn ở trên để đại diện cho các chức năng tôi không thể tìm ra. Tôi đã xem các video trên YouTube và đọc trang người đàn ông, nhưng tôi không thể xem nó có thể được thực hiện như thế nào, nếu có thể.

Cảm ơn!

  • danboo
+0

bạn có thể làm cho một chạy riêng biệt của 'parallel' rằng chỉ cần thêm các tiêu đề để tất cả các file khi chế biến được thực hiện? Hoặc thực sự là một vòng lặp 'for', nếu bạn kiểm soát vị trí và tên nào được sử dụng cho các tệp đầu ra' song song' của bạn. Chúc may mắn! – shellter

Trả lời

5

Hôm nay bạn có thể --skip-first-line và thêm tiêu đề sử dụng echo:

seq 10 | parallel --skip-first-line --pipe '(echo hea,der; cat) | my_prog' 

Trong một phiên bản tương lai bạn sẽ có tùy chọn '--header' mà sẽ là một regexp khớp với phần cuối tiêu đề của bạn (ví dụ: '\ n' cho một dòng hoặc '\ n. * \ n' cho hai dòng hoặc '---' cho đến và bao gồm cả hai dòng đầu tiên ---)

- Chỉnh sửa -

phiên bản mới nhất của GNU Parallel bây giờ có thể làm:

parallel --pipe --header : my_program 
+0

Tôi mong muốn tùy chọn '--header'. Và cảm ơn ý tưởng 'echo'. Mặc dù nó không phải là đủ chung cho việc sử dụng của tôi, ít nhất tôi cũng có thể sử dụng một cái gì đó tương tự cho các tệp đĩa: 'cat large.csv | song song - skip-first-line --pipe '(đầu -1 large.csv; cat) | my_prog'' – danboo

Các vấn đề liên quan