2010-11-18 14 views
3

en şöyle bir dosya olmadığını varsayalım:İçeriği, içeriği temel alarak birden çok çıktıya ayırın.

xxxx aa whatever 
yyyy bb whatever 
zzzz aa whatever 

Ben içeren, 2 dosyaya bölmek edilmesini istediğiniz:

ilk:

xxxx aa whatever 
zzzz aa whatever 

ikinci:

yyyy bb whatever 

Ie Satırları satırlardaki bazı değerlere göre gruplamak istiyorum (kural: boşluklarla ayrılmış 2. sözcük), ancak grupların içindeki satırları yeniden sıralamayın.

Elbette bunu yapmak için bir program yazabilirim, ama böyle bir şey yapabilecek herhangi bir hazır aracın olup olmadığını merak ediyorum.

Maalesef, çok açık olduğunu düşündüğüm gibi, bundan bahsetmedim - farklı "kelimelerin" sayısı çok büyük. Onlardan en az 10000 hakkında konuşuyoruz. Yani Elden önce kelimelerin numaralandırılmasına dayalı herhangi bir çözüm işe yaramayacaktır.

Ayrıca - Çok geçişli bölünmeyi gerçekten sevmem - söz konusu dosyalar genellikle oldukça büyük.

cevap

6

Bu, biz stdout ve stderr diğer hatlara eşleşmeleri için bir bayrak ekleyin olabilir mi GNU grep'in sonra bakıcı ile tartışılan output.aa, output.bb adlı dosyalar, vb .:

awk '{print >> "output." $2}' input.file 
+0

Bu harika! Hatta IO işlemlerinin sayısını sınırlamak için tamponlama yapar. Çok teşekkürler. –

1

Peki, eşleşen satırları almak için bir grep ve eşleşmeyen satırları almak için bir grep -v yapabilirdiniz.

Hm, sort -f" " -s -k 2,2 yapabilirdiniz, ancak bu O (n log n).

+0

Circa 1994 yaratacak ama bu fikri beğenmedi :-). –