Egrep,

2009-03-06 11 views
1

-f seçeneği ile garip davranır, garip bir oyunculuk var egrep -f.Egrep,

Örnek:

$ egrep -f ~/tmp/tmpgrep2 orig_20_L_A_20090228.txt | wc -l 
3 
$ for lines in `cat ~/tmp/tmpgrep2` ; do egrep $lines orig_20_L_A_20090228.txt ; done | wc -l 
12 

birisi bana sorun ne olabilir bir ipucu verebilir misiniz? Hayır, dosyalar yürütmeler arasında değişmedi. Egrep satır sayısı için beklenen cevap 12'dir.

Dosya içeriğine UPDATE: Aranan dosyada her biri 500 karakter uzunluğunda, 13.000 satır bulunur, desen dosyası 12 satır içerir, her biri 24 karakterdir . Desen her zaman (ve sadece), seached dosyasında (26-49) sabit bir konumda gerçekleşir.

Desen içeriğine göre UPDATE: tmpgrep2'deki her bir desen 24 karakter uzunluğunda bir sayıdır.

+0

Date/Time to Last Exit, komut satırı isteminize mi hitap ediyor? Eğer öyleyse, bir soruda yazdıklarınızı '$' (bash et al) ya da '%' (C kabuğu için) ya da root olarak çalışıyorsanız '#' ile sınırlamanızı tavsiye ederim. –

cevap

1

Okunan satırlarda, kabuğun ikinci sürümde sizin için genişlediği/değiştirdiği bir şey var mı? Daha sonra bu, kalıpların kendisini okuduğunda grep tarafından yapılmaz, böylece farklı bir desen deseninin eşleşmesi sağlanır.

Kabuğun böyle bir çağrıda değişken değerde herhangi bir genişleme yapıp yapmadığını tam olarak bilmiyorum, ama en azından bir fikir.

DÜZENLEME: Hayır, herhangi bir değişiklik yapmıyor gibi görünüyor. Ancak, deseniniz beyaz boşluk içeriyorsa, satır için sorun olabilir, çünkü döngü, her satırın içinden değil, her belirtecin içinden geçecektir. read bash yerleşiğine bir göz atın.

+0

Olası bir sebep olabilir (+1), ancak bu durumda değil, desen güncellememe bakın. –

0

Ikinci @unwind.

Neden wc -l olmadan çalıştırıyorsunuz ve her aramanın ne bulduklarını görmüyor musunuz?

Ve belki:

for lines in `cat ~/tmp/tmpgrep2` ; do echo $lines ; done 

Hemen şimdi kabuk $lines işleyen görmek için?

+0

Bunu yaptım. Wc -l, garip davrandığını göstermek için eklendi. –

2

arama modelleri aynı hat üzerinde bulunursa, o zaman gördüğünüz sonucu alabilirsiniz:

abc 
def 
ghi 
jkl 

ve veri dosyasıdır:

abcdefghijklmnoprstuvwxzy 

aradığınız varsayalım

daha sonra tek seferlik komut 1 yazdıracak ve döngü 4 yazdıracaktır.

+0

Sorunun olası nedeni (+1 oy), ancak durum böyle değil. Desenin nerede meydana gelebileceğini güncellemeye bakın. –

+0

Sonra sistemden wc almak ve ham formda egrep sonuçlarına bakmak için zaman. Satır numaralarını bildirmek için '-n' seçeneğini de kullanmak isteyebilirsiniz. Sadece bir düzine çıkış hattı aldığınız için çok da kötü olmayacak. Belki 'cut -c1-70' kullanabilirsiniz, böylece uzun çizgiler daha kısa olur. –

+0

Eşleştirmeye çalıştığınız verilerde normal ifade meta karakterleri var mı? Bu da şeyleri karıştırırdı. Ama şimdi, muhtemelen, iki ayrı sonuç kümesinin manuel analizi ile kaldıysanız. FWIW: düşünülecek en son şey 'egrep'te hata'; Bu en olası değildir. –

1

~/tmp/tmpgrep2 içindeki herhangi bir kopyası var mı? Egrep yalnızca dupları bir kez kullanır, ancak döngünüz her olayı kullanır.

böyle bir şey yaparak safdilli kurtulun: Diğerleri zaten ben bakmak şeylerin çoğunu ile geldi

$ for lines in `sort < ~/tmp/tmpgrep2 | uniq` ; do egrep $lines orig_20_L_A_20090228.txt ; done | wc -l 
+0

+1 bunun nedeni olabilir, ancak benim durumumda değil. Desen dosyamda hiç kopya yok. –

0

. Kontrol edeceğim bir sonraki şey, GREP_OPTIONS ortam değişkeni veya makinenizde aranan şey. Ortam ayarlarına müdahale eden bir komut satırı argümanı kullanırken en tuhaf hata mesajlarını veya davranışlarım var.

İlgili konular