Nowe posty

Autor Wątek: AWK-problem  (Przeczytany 2197 razy)

marcin7777

  • Gość
AWK-problem
« dnia: 2012-06-14, 11:45:09 »
Proszę o pomoc w skonstruowaniu zapytania AWK w celu osiągnięcia następującego efektu:

- "lynx -dump http://..." otwiera nam jakąś stronę www, następnie wynik zapisuje do pliku txt
- czytamy ten plik tekstowy, zawarte są w nim różne dane osobowe, w tym numery telefonów
- format zapisu poszczególnych numerów jest RÓŻNY, tzn. każdy wpis ma inny format, np: XXX-XXX-XXX, XXX XXX XXX, XX-XX-XX-XXX, XX XX XX XXX, 0-XXX XXX XXX, +48-XXX-XXX-XXX itp...
- jak wiadomo, numer tel. komórkowego składa się z 9 liczb
- interesuje mnie "wyciągnięcie" tylko numerów telefonów komórkowych

Mam problem ze składnią AWK, żeby znalazł nr tel. wg zdefiniowanych powyższych przykładowych wzorców, czyli wyszukał ciąg liczb wg w/w formatów.

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
AWK-problem
« Odpowiedź #1 dnia: 2012-06-14, 12:43:06 »
Czemu lynx? Nie lepiej po prostu wget (z parametrem "-O -") albo curl? To pozwoli pominąć zapis do pliku i dane przekazać do obróbki bezpośrednio przez potok (|).

Zamiast awk lepiej użyć do tego grepa i odpowiedniego wyrażenia regularnego.
wget -O - 'http://...' | grep -o -E '...'
Co do wyrażenia, to możesz albo podać w nim różne kombinacje (za pomocą alternatywy |), albo wybrać coś uniwersalnego, na przykład 7 lub więcej cyfr lub znaków odstępu otoczone z obu stron cyfrą oraz opcjonalny + z przodu:
\\+?[0-9][0-9 -]{7,}[0-9]

marcin7777

  • Gość
AWK-problem
« Odpowiedź #2 dnia: 2012-06-14, 12:59:34 »
Dzięki za podpowiedź. W sumie mogę uzyć również grepa. Jak użyć | do podania kilku różnych kombinacji zapisu numeru, np z + oraz z +48 na początku ?
Co, jeśli w jednej linijce pojawią się dwa numery oddzielone "lub" ?
Chciałbym wyciągnąć możliwie wszystkie te numery.

chmooreck

  • Gość
AWK-problem
« Odpowiedź #3 dnia: 2012-06-14, 13:53:48 »
Cytat: marcin7777
Jak użyć | do podania kilku różnych kombinacji zapisu numeru, np z + oraz z +48 na początku ?
Dowiesz się tego z lektury na temat wyrażeń regularnych.