Nowe posty

xx Problem ze sterownikami. (5)
Wczoraj o 21:25:16
xx Instalacja xfce4 (2)
Wczoraj o 16:20:17
xx Serie kompilacji bez instalacji dla “emerge” w Gentoo (2)
2024-04-08, 18:40:04
xx Plasma 6 w Neonie ssie trochę mniej ... (17)
2024-04-05, 10:03:46
xx Problem z Linux Lite po instalacji (3)
2024-04-03, 14:23:40
xx Jak właczyć num locka przy starcie systemu debian 12? (12)
2024-04-02, 17:43:54
xx Brak dźwieku w systemie. (5)
2024-04-02, 16:13:41
xx Dystrybucja pod HP Omen (7)
2024-03-29, 11:33:05
xx [Poradnik] Wyszukiwanie Sterowników (2)
2024-03-27, 21:08:23
xx Ile pingwinów? (1)
2024-03-27, 08:59:24

Autor Wątek: AWK-problem  (Przeczytany 2167 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.