2011-11-04 6 views
5

Gnu paralel olarak, her orijinal girişin ilk satırını her bir alt işin STDIN'sine tekrarlayacak şekilde mümkün mü?gnu paralel bir başlıklı CSV dosyası işleme

Üst kısımda bir başlık satırı içeren bir CSV dosyasına sahibim. Örneğin:

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

gerçek dosya I:

> csv_extract large.csv count 
123 
456 

ben seri değerlerin toplamı:

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

oldukça pozisyonda çok isimleri ile daha sütun ayıklamak bir araca sahip çok daha büyüktür ve operasyon toplanmadan daha karmaşıktır, fakat aynı ilkeler geçerli olacaktır. Dosyayı işlemek için gnu paralel kullanmak istiyorum, ancak her iş için CSV başlığını tekrarlamak için gnu paralel olduğunu söylemek mümkün değil.

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

ben çözemiyorum işlevselliği temsil etmek yukarıda --repeat-ilk basamak seçeneği yaptık:

İdeal gibi bir şeyle operasyonu çalıştırabilir. YouTube videolarını izledim ve man sayfasını okudum, ancak mümkün olduğunda nasıl yapılabildiğini göremiyorum.

Teşekkürler! Eğer seçeneğine sahip olacak gelecekteki bir versiyonda

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

'--header' bir regexp'in olacak:

  • danboo
+0

sadece tüm dosyalara başlığını ekler parallel' 'ayrı bir çalışma yapmak olabilir? Ya da aslında bir 'for' döngüsü, 'paralel' çıktı dosyalarınız için nerede ve hangi adların kullanıldığını kontrol ederseniz. İyi şanslar! – shellter

cevap

5

Bugün --skip-first-line ve echo kullanarak üstbilgi ekleyebilirsiniz başlığınızın sonuyla eşleşir (örneğin: '\ n' için bir satır veya '\ n. * \ n' için iki satır veya '---' için ve dahil olmak üzere ilk ---)

- Düzenleme - GNU Parallel

Yeni sürümü şimdi yapabilirsiniz: işlem bitince

parallel --pipe --header : my_program 
+0

'- Başlığı' seçeneğini sabırsızlıkla bekliyorum. Ve echo' fikri için teşekkürler. Kullanımım için yeterince genel olmamasına rağmen, en azından disk dosyaları için benzer bir şey kullanabilirim: 'cat large.csv | paralel - atlama-ilk satır - boru '(kafa -1 large.csv; kedi) | my_prog'' – danboo