Nowe posty

xx Odpowiednie wykorzystanie rdzeni P i E procesora (1)
Dzisiaj o 06:44:59
xx Samba DC/AD problem z DNS (0)
2024-07-25, 12:42:23
xx DNS i WWW na virtualbox (4)
2024-07-24, 10:30:38
xx Instalacja Manjaro Linux (11)
2024-07-13, 22:57:31
xx Linux Lite 6.6. Po uruchomieniu z DVD przeglądarka Chrome jest nieaktywna (12)
2024-07-10, 22:33:30
xx Laptop MSI CR500 - nie akceptuje linuksa (6)
2024-07-03, 05:30:18
xx Co to jest ? (3)
2024-07-02, 13:36:58
xx Nowa wersja libreoffice (1)
2024-06-30, 18:22:49
xx Dystrybucja - środowisko graficzna dla amigowca (MUI) (4)
2024-06-30, 12:14:25
xx Jaki kod błędu zwracać z kernela? (3)
2024-06-09, 12:29:22

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