2011-07-18 12 views
6

sonucu aşağıdaki çizgilerle bir giriş akışı verildi: XXX her hat için sayı olmak üzereAWK: her bir çizgide kıvrılma yürütmek ve ayrıştırma

curl -s http://foo.bar/some.php?id=xxx 

aramak istiyorum

123 
456 
789 
098 
... 

ve her zaman bir awk betiği çıktı akışına yazılan curl çıktısından bazı bilgileri getirsin. Bu awk kullanmadan mümkün olup olmadığını merak ediyorum "sistemi()" şu şekilde çağrı:

cat lines | grep "^[0-9]*$" | awk ' 
    { 
     system("curl -s " $0 \ 
     " | awk \'{ #parsing; print }\'") 
    }' 
+0

Bu soruyu girdinin "gerçek" bir dosyadan değil, bir dosyadan geldiği durumlarda ilginç buluyorum. Örneğin, periyodik olarak, örneğin, veri (çizgiler) üreten bir algılama cihazı. on/dev/ttyUSB0. Bu gibi durumlarda, önerilen cevaplar (bir dosyadan okuma) sadece veri akışından geçici bir dosya saklamak ve dosyayı periyodik olarak işliyorsa (veri işlenirken veri geliyorsa) uygulanabilir. Ama daha doğrudan bir yaklaşım (bir boru kullanarak) daha iyi olabilir ... –

+0

Not "kedi | grep | awk 'sadece 'awk'/^ [0-9] + $/{} 'file' için basitleştirilebilir. Ayrıca, ne tür bir ayrıştırma yapmak istiyorsunuz? Belki de "awk" yi kullanmak gerekli değildir ve "while while" döngüsü yeterlidir. – fedorqui

cevap

0

bir kabuk döngü benzer bir sonuç elde ederim, şöyle: için

#!/bin/bash 
for f in $(cat lines|grep "^[0-9]*$"); do 
    curl -s "http://foo.bar/some.php?id=$f" | awk '{....}' 
done 

Alternatif yöntemler benzer görevleri yapmak, bir HTTP istemcisiyle Perl veya Python kullanmayı içerir.

1

Sen bash kullanarak ve awk system çağrıyı önleyebilirsiniz: dosya dinamik kimliklerini eklenen alırsa

grep "^[0-9]*$" lines | while read line; do 
    curl -s "http://foo.bar/some.php?id=$line" | awk 'do your parsing ...' 
done 
0

, böyle dosyasında daha fazla veri, kontrol etmeyi sürdürmek küçük while döngü Artalanda edebilirsiniz:

while IFS= read -d $'\n' -r a || sleep 1; do [[ -n "$a" ]] && curl -s "http://foo.bar/some.php?id=${a}"; done < lines.txt

Aksi takdirde statik eğer, break için sleep 1 değiştirebilir ve hiçbir veri lef olduğunda dosyayı okumak ve çıkılacak t, nasıl yapılacağını bilmek oldukça yararlıdır.

İlgili konular