Manipulacja Big Data dla zabawy i zysku Część 2

Manipulacja Big Data dla zabawy i zysku Część 2

W pierwszej części tej serii manipulacji dużych zbiorów danych - którą możesz przeczytać najpierw, jeśli jeszcze go nie przeczytałeś; Manipulacja Big Data dla zabawy i zysku Część 1 - Omówiliśmy na pewną długość różnych terminologii i niektórych pomysłów dotyczących dużych zbiorów danych, a dokładniej, ponieważ odnoszą się do obsługi, przekształcania, małożenia, mungowania, parsowania, wiązania, przekształcania i manipulowania dane. Często te terminy są używane zamiennie i często ich użycie nakładają się. Przyjrzeliśmy się również pierwszego zestawu narzędzi Bash, które mogą pomóc nam w pracy związanej z niniejszymi Warunkami.

W tym artykule zbadano kolejny zestaw narzędzi BASH, które mogą nam pomóc podczas przetwarzania i manipulowania tekstem (lub w niektórych przypadkach binarnych) dużych zbiorów danych. Jak wspomniano w poprzednim artykule, transformacja danych w ogóle jest przedmiotem częściowo nieważnym, ponieważ istnieją setki narzędzi dla każdego konkretnego formatu tekstu. Pamiętaj, że czasami korzystanie z narzędzi BASH może nie być najlepszym rozwiązaniem, ponieważ narzędzie gotowe może wykonywać lepszą pracę. To powiedziawszy, ta seria jest specjalnie dla tych wszystkich (wielu) innym razem, gdy żadne narzędzie nie jest dostępne, aby uzyskać dane w wybranym formacie.

A jeśli chcesz dowiedzieć się, dlaczego manipulacja Big Data może być zarówno opłacalna, jak i zabawna… najpierw przeczytaj część 1.

W tym samouczku się nauczysz:

  • Więcej technik sprzątania / parsowania / parsingu / manipulacji / manipulacji / transformacji
  • Jakie narzędzia Bash są dostępne, aby Ci pomóc, szczególnie dla aplikacji tekstowych
  • Przykłady pokazujące różne metody i podejścia
Manipulacja Big Data dla zabawy i zysku Część 2

Zastosowane wymagania i konwencje oprogramowania

Wymagania oprogramowania i konwencje linii poleceń Linux
Kategoria Wymagania, konwencje lub wersja oprogramowania
System Niezależny od rozkładu Linuksa
Oprogramowanie Wiersz poleceń Bash, system oparty na Linuksie
Inny Wszelkie narzędzie, które nie jest zawarte w skorupce Bash domyślnie można zainstalować za pomocą za pomocą sudo apt-get instal instal narzędzie (Lub Mnij instalacja dla systemów opartych na Redhat)
Konwencje # - Wymaga wykonywania Linux -Commands z uprawnieniami root bezpośrednio jako użytkownik root lub za pomocą sudo Komenda
$-Wymaga wykonania Linux-commands jako zwykłego niepewnego użytkownika


Przykład 1: AWK

Wracając do danych, których użyliśmy w naszym pierwszym artykule z tej serii (mała pobrana część bazy danych Wikipedii), możemy użyć AWK, aby rozpocząć manipulowanie danymi:

$ GREP '3197816' ENWIKI-LATEST PAGES-Articles-Multistream-Index19.TXT-P30121851P31308442 269019710: 31197816: Linux jest moim przyjacielem $ GREP '3197816' ENWIKI-LATEST-PAGES-Articles-Multistream-Index19.TXT-P30121851P31308442 | awk 'print 2 $' 

Najpierw greppowaliśmy dla określonego elementu w pliku bazy danych płaskich tekstu. Kiedyś mieliśmy wyjście (269019710: 31197816: Linux jest moim przyjacielem), następnie próbowaliśmy wydrukować drugą kolumnę za pomocą instrukcji wydrukuj 2 $ (Wydrukuj drugą kolumnę) do Awk, Ale to nie powiodło się, czyniąc Jest. Powodem tego jest to, że Awk narzędzie domyślnie użyje Whitespace (spacja lub karta), ponieważ jest separatora. Możemy to potwierdzić, czytając instrukcję (Man Awk) lub po prostu przez testowanie;

$ echo -e 'test1 \ ttest2' test1 test2 $ echo -e 'test1 \ ttest2' | awk 'drukuj 2 $' test2 $ echo -e 'test1 test2' | AWK 'print 2 $' test2 

W pierwszym wierszu wstawiamy kartę wyrażenia regularnego (Regex) (\T) W wyjściu, które należy wygenerować przez Echo i włączamy składnię wyrażenia regularnego, określając -mi Do Echo. Jeśli chcesz dowiedzieć się więcej o wyrażeniach regularnych w Bash i gdzie indziej, zobacz Bash Regexps dla początkujących z przykładami, Advanced Bash Regex z przykładami i częściowo powiązane wyrażenia regularne z przykładami z przykładami.

Następnie ponownie używamy Awk Aby wydrukować drugą kolumnę wydrukuj 2 $ i zobacz, że tym razem wyjście jest prawidłowe. Wreszcie testujemy „i ponownie widzimy dane wyjściowe jako test2. W naszym poprzednim przykładzie widzimy również, że tekst 269019710: 31197816: Linux I Jest jest oddzielony przestrzenią - która pasuje do działania Awk. Szczegółowe informacje o pracy Awk jest tutaj pomocny, ponieważ często dane są sformatowane na różne sposoby. Możesz zobaczyć przestrzenie, zakładki, kolony, półkolony i inne symbole używane jako separatory pola. I staje się jeszcze bardziej złożony w kontaktach z HTML, XML, JSON, MD itp. formaty.

Zmieńmy separator za pomocą -F opcja Awk:

$ GREP '3197816' ENWIKI-LATEST PAGES-Articles-Multistream-Index19.TXT-P30121851P31308442 | awk -f ': "drukuj 2 $' 31197816 

Dokładnie to, czego potrzebujemy. -F jest opisany w Awk Podręcznik as separator pola wejściowego. Możesz zobaczyć, jak użycie AWK do drukowania różnych kolumn postrzeganych w danych (możesz po prostu zamienić 2 USD Do 3 USD Aby wydrukować trzecią kolumnę itp.), abyśmy mogli przetworzyć go dalej w formacie, który lubimy. Aby zaokrąglić, zmień kolejność pól i upuść jedno pole, które nie sądzimy, że potrzebujemy:

$ GREP '3197816' ENWIKI-LATEST PAGES-Articles-Multistream-Index19.TXT-P30121851P31308442 | awk -f ': "drukuj 3 $" \ t "$ 2'> out $ cat out Linux to mój przyjaciel 31197816 


Świetnie! Zmieniliśmy kolejność kolumn 2 i 3 i wysłaliśmy wyjście do nowego pliku i zmieniliśmy separator na a patka (dzięki do "\T" Wstaw w instrukcji drukowania). Jeśli po prostu po prostu przetworzymy cały plik:

$ awk -f ': "drukuj 3 $" \ t "$ 2' enwiki-Latest-Pages-Articles-Multistream-Index19.TXT-P30121851P31308442> OUT $ 

Całe dane wejściowe są strukturalnie zmienione na nowy format! Witamy w zabawnym świecie manipulacji Big Data. Możesz zobaczyć, jak z kilkoma prostymi poleceniami Bash jesteśmy w stanie zasadniczo zrestrukturyzować/zmienić plik, jak uważamy za dopasowanie. Zawsze znalazłem Grzmotnąć Aby najbliżej idealnego zestawu narzędzi do manipulacji dużymi zbiorami danych, w połączeniu z niektórymi gotowymi narzędziami i być może kodowaniem Python. Jednym z głównych powodów tego jest mnóstwo narzędzi dostępnych w Bash, które ułatwiają manipulację dużych zbiorów danych.

Następnie zweryfikujmy naszą pracę

WC -L enwiki-Latest-Pages-Articles-Multistream-Index19.TXT-P30121851P31308442 329956 ENWIKI-LATEST-PAGES-Articles-Multistream-Index19.TXT -P30121851P31308442 $ WC -L OUT 329956 OUT $ GREP '3197816' Out Linux jest moim przyjacielem 31197816 

Świetne - ta sama liczba linii jest w oryginale i zmodyfikowanym pliku. A konkretny przykład, którego wcześniej użyliśmy, wciąż tam jest. Wszystko dobrze. Jeśli chcesz, możesz kopać trochę dalej z takimi poleceniami głowa I ogon W ramach obu plików w celu zweryfikowania linii wyglądają poprawnie zmienione na całej formie.

Możesz nawet spróbować otworzyć plik w swoim ulubionym edytorze tekstu, ale osobiście poleciłbym vi Ponieważ liczba linii może być duża i nie wszyscy redaktorzy tekstu dobrze sobie z tym poradzić. vi Nauczenie się zajmuje trochę czasu, ale jest to podróż, którą warto odbyć. Kiedy będziesz dobrze vi, Nigdy się nie spojrzysz - rośnie na ciebie, że tak powiem.

Przykład 2: TR

Możemy użyć tr narzędzie do tłumaczenia lub usunięcia niektórych znaków:

$ GREP '3197816' ENWIKI-LATEST PAGES-Articles-Multistream-Index19.TXT-P30121851P31308442 | tr ': "\ t' 269019710 31197816 Linux jest moim przyjacielem 

Tutaj zmieniamy nasz separator pola (:) do zakładki (\T). Łatwe i proste, a składnia mówi sama za siebie.

Możesz także użyć tr Aby usunąć dowolną postać:

$ GREP '3197816' ENWIKI-LATEST PAGES-Articles-Multistream-Index19.TXT-P30121851P31308442 | tr -d ':' | tr -d '[0-9]' Linux jest moim przyjacielem 


Możesz zobaczyć, jak najpierw usunęliśmy : z wyjścia za pomocą usunięcia (-D) Opcja tr, a następnie usunęliśmy - przy użyciu wyrażenia regularnego - dowolnej liczby w zakresie 0-9 ([0-9]).

Zwróć uwagę, jak zmiana :: Do \T nadal nie pozwala nam używać AWK bez zmiany separatora pola, ponieważ są teraz obie zakładki (\T) i przestrzenie na wyjściu i oba są widoczne domyślnie (w Awk) Jako separatory pola. Więc drukowanie 3 USD z AWK prowadzi do pierwszego słowa (zanim widać przestrzeń):

$ GREP '3197816' ENWIKI-LATEST PAGES-Articles-Multistream-Index19.TXT-P30121851P31308442 | tr ': "\ t' | awk 'print 3 $' Linux 

Podkreśla to również, dlaczego zawsze bardzo ważne jest testowanie, ponowne przetestowanie i testowanie wszystkich wyrażeń regularnych i przekształcania/manipulowania danych instrukcjach poleceń.

Wniosek

Mnóstwo narzędzi w Bash sprawia, że ​​manipulacja Big Data jest zabawna, aw niektórych przypadkach jest bardzo łatwa. W tym drugim artykule z serii kontynuowaliśmy eksplorowanie narzędzi Bash, które mogą pomóc nam w manipulacji dużych zbiorów danych.

Ciesz się podróżą, ale pamiętaj o ostrzeżeniu podanym na końcu pierwszego artykułu… Big Data mogą wydawać się mieć własny umysł, a praca z wieloma danymi (lub z przeciążeniem danych wejściowych. Życie), a to (głównie) przeciążenie percepcji, nadmierne zorganizowanie perspektywy, utracone czas i kora przedczołowa (i inne obszary mózgu) nadużycie. Im bardziej złożony projekt, dane źródłowe lub format docelowy, tym większe ryzyko. Mówiąc tutaj z dużej liczby doświadczeń.

Dobrym sposobem na przeciwdziałanie tym niebezpieczeństwom jest ustalenie ścisłych ograniczeń czasowych w pracy ze złożonymi i dużymi zestawami danych. Na przykład 2 godziny (w maks.) Dziennie. Będziesz zaskoczony, co możesz osiągnąć, jeśli postawicie umysł na dedykowane dwie godziny i nie przejmuj się, konsekwentnie. Nie mów, że cię nie ostrzegałem 🙂

Daj nam znać swoje przemyślenia poniżej - interesujące duże zestawy danych, strategie (zarówno techniczne, jak i styl życia/podejście) i inne pomysły są mile widziane!

Powiązane samouczki Linux:

  • Manipulacja Big Data dla zabawy i zysku Część 3
  • Big Data Manipulacja dla zabawy i zysku Część 1
  • Rzeczy do zainstalowania na Ubuntu 20.04
  • Wprowadzenie do automatyzacji, narzędzi i technik Linuksa
  • Rzeczy do zrobienia po zainstalowaniu Ubuntu 20.04 Focal Fossa Linux
  • Mastering Bash Script Loops
  • Zagnieżdżone pętle w skryptach Bash
  • Mint 20: Lepsze niż Ubuntu i Microsoft Windows?
  • Obsługa danych wejściowych użytkownika w skryptach Bash
  • Ubuntu 20.04 sztuczki i rzeczy, których możesz nie wiedzieć