Orta büyüklükte (yaklaşık 10M-100M satır) sekmeyle ayrılmış sütun metin dosyalarıyla çalışmak için unix kabuğumda çok fazla grep awk sıralama kullanıyorum. Bu açıdan unix kabuğu benim e-tablom.
Ama büyük bir sorunum var, yani kimlik listesi verilen kayıtları seçmek.
table.csvBiçime sahip dosya id\tfoo\tbar...ve kimlik ids.csvlistesi içeren dosyaya sahip olmak için yalnızca table.csvkimliğin bulunduğu kayıtları seçin ids.csv.
bir çeşit /programming/13732295/extract-all-lines-from-text-file-based-on-a-given-list-of-ids ama kabuklu, perl değil.
grep -FAçıkçası kimlikleri değişken genişlikse yanlış pozitif üretir.
joinasla çözemediğim bir yardımcı program. Her şeyden önce, alfabetik sıralama gerektirir (dosyalarım genellikle sayısal olarak sıralanır), ancak o zaman bile yanlış siparişten şikayet etmeden ve bazı kayıtları atlamadan çalışamıyorum. Bu yüzden hoşuma gitmedi. id ^id\tsayısı çok olduğunda grep -f, -s ile dosyaya karşı çok yavaştır.
awkhantal.
Bunun için iyi çözümler var mı? Sekmeyle ayrılmış dosyalar için belirli bir araç var mı? Ekstra işlevsellik de memnuniyetle karşılanacaktır.
UPD: Düzeltildi sort->join
awk.
sortsayısal, alfabetik ve diğer her türlü sıralama yapabilir. Bkz man sort.
grep -fbuna değer daha fazla sorun gibi bu strateji sesleri koruyarak, çok yavaş - varyasyonlar olasılıkla aynı O (N * M) performans sorunları pençesine düşecek. Belki de zaman normalleştirilmiş bir SQL DB kullanmayı öğrenmek için daha iyi harcanan olurdu ...