Manipulasi data besar untuk keseronokan dan keuntungan bahagian 2

Manipulasi data besar untuk keseronokan dan keuntungan bahagian 2

Di bahagian pertama siri manipulasi Data Big ini - yang mungkin anda ingin baca terlebih dahulu jika anda belum membacanya; Manipulasi data besar untuk keseronokan dan keuntungan Bahagian 1 - kami membincangkan dengan panjang lebar pelbagai istilah dan beberapa idea yang mengelilingi data besar, atau lebih khusus kerana ia berkaitan dengan pengendalian, mengubah, merapikan, membuang, menghuraikan, bertengkar, mengubah dan memanipulasi data. Selalunya istilah ini digunakan secara bergantian dan selalunya penggunaannya bertindih. Kami juga melihat set pertama alat bash yang dapat membantu kami dengan pekerjaan yang berkaitan dengan istilah ini.

Artikel ini akan meneroka set alat bash selanjutnya yang dapat membantu kami ketika memproses dan memanipulasi data besar berasaskan teks (atau dalam beberapa kes). Seperti yang disebutkan dalam artikel sebelumnya, Transformasi Data secara umum adalah topik separa tanpa henti kerana terdapat beratus-ratus alat untuk setiap format teks tertentu. Ingatlah bahawa kadang-kadang menggunakan alat bash mungkin bukan penyelesaian terbaik, sebagai alat luar boleh melakukan pekerjaan yang lebih baik. Yang mengatakan, siri ini khusus untuk semua (banyak) masa lain apabila tiada alat tersedia untuk mendapatkan data anda dalam format pilihan anda.

Dan, jika anda ingin mengetahui mengapa manipulasi Big Data dapat menguntungkan dan menyeronokkan ... sila baca Bahagian 1 Pertama.

Dalam tutorial ini anda akan belajar:

  • Lebih banyak teknik pengendalian / parsing / pengendalian / manipulasi / transformasi yang lebih besar
  • Apa alat bash yang tersedia untuk membantu anda, khususnya untuk aplikasi berasaskan teks
  • Contoh menunjukkan kaedah dan pendekatan yang berbeza
Manipulasi data besar untuk keseronokan dan keuntungan bahagian 2

Keperluan perisian dan konvensyen yang digunakan

Keperluan Perisian dan Konvensyen Talian Perintah Linux
Kategori Keperluan, konvensyen atau versi perisian yang digunakan
Sistem Pengedaran linux-bebas
Perisian Baris perintah bash, sistem berasaskan linux
Yang lain Sebarang utiliti yang tidak termasuk dalam shell bash secara lalai boleh dipasang menggunakan sudo apt-get memasang nama utiliti (atau pemasangan yum untuk sistem berasaskan redhat)
Konvensyen # - memerlukan komando linux untuk dilaksanakan dengan keistimewaan akar sama ada secara langsung sebagai pengguna root atau dengan menggunakan sudo perintah
$-Memerlukan komando linux untuk dilaksanakan sebagai pengguna yang tidak istimewa


Contoh 1: Awk

Kembali ke data yang kami gunakan dalam artikel pertama kami dalam siri ini (bahagian kecil yang dimuat turun dari pangkalan data Wikipedia), kami boleh menggunakan AWK untuk mula memanipulasi data:

$ grep '31197816' enwiki-latest-pages-articles-multistream-index19.TXT-P30121851P313084442 269019710: 31197816: linux adalah kawan saya $ grep '31197816' enwiki-latest-pages-artistream-index19.TXT-P30121851P31308442 | awk 'print $ 2' adalah 

Mula -mula kita menjaringkan item tertentu dalam fail pangkalan data teks rata. Sebaik sahaja kami mempunyai output (269019710: 31197816: Linux adalah kawan saya), kami kemudian cuba mencetak lajur kedua dengan menggunakan arahan cetak $ 2 (cetak lajur kedua) ke awk, Tetapi ini gagal, membuat Adalah. Sebabnya ialah awk utiliti secara lalai akan menggunakan ruang putih (ruang atau tab) kerana pemisah itu. Kami dapat mengesahkannya dengan membaca manual (lelaki awk), atau hanya dengan ujian;

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

Dalam baris pertama kami memasukkan tab Ekspresi Biasa (Regex) (Regex) (\ t) dalam output yang akan dihasilkan oleh echo dan kami membolehkan sintaks ekspresi biasa dengan menentukan -e ke echo. Sekiranya anda ingin mengetahui lebih lanjut mengenai ungkapan biasa di Bash dan di tempat lain, sila lihat Bash Regexps untuk pemula dengan contoh, Advanced Bash Regex dengan contoh dan ungkapan biasa Python yang berkaitan dengan contoh.

Seterusnya kita menggunakan semula awk Untuk mencetak lajur kedua cetak $ 2 dan lihat bahawa output kali ini betul. Akhirnya kami menguji dengan "dan sekali lagi melihat output dengan betul sebagai ujian2. Kita juga dapat melihat contoh bekas kita bahawa teks itu 269019710: 31197816: Linux dan Adalah dipisahkan oleh ruang - yang sepadan dengan kerja awk. Maklumat terperinci mengenai kerja awk sangat membantu di sini, kerana sering data diformat dalam pelbagai cara. Anda mungkin melihat ruang, tab, kolon, titik koma dan simbol lain yang digunakan sebagai pemisah medan. Dan ia menjadi lebih kompleks apabila berurusan dengan HTML, XML, JSON, MD dan lain -lain. Format.

Mari kita ubah pemisah dengan menggunakan -F pilihan untuk awk:

$ grep '31197816' enwiki-latest-pages-articles-multistream-index19.TXT-P30121851P31308442 | awk -f ': "cetak $ 2' 31197816 

Tepat apa yang kita perlukan. -F diterangkan dalam awk manual sebagai pemisah medan input. Anda dapat melihat cara menggunakan AWK untuk mencetak pelbagai lajur yang dilihat dalam data (anda hanya boleh menukar $ 2 ke $ 3 untuk mencetak lajur ketiga, dll.), supaya kita dapat memprosesnya lebih jauh ke dalam format yang kita suka. Mari, untuk bulat, tukar susunan bidang dan jatuhkan satu bidang yang kita tidak fikir kita perlukan:

$ grep '31197816' enwiki-latest-pages-articles-multistream-index19.TXT-P30121851P31308442 | awk -f ': "print $ 3" โ€‹โ€‹\ t "$ 2'> keluar $ cat out linux adalah kawan saya 31197816 


Hebat! Kami menukar susunan lajur 2 dan 3, dan menghantar output ke fail baru, dan menukar pemisah ke a tab (Terima kasih kepada "\ t" masukkan dalam pernyataan cetak). Sekiranya kita sekarang hanya memproses keseluruhan fail:

$ awk -f ': "print $ 3" โ€‹โ€‹\ t "$ 2' enwiki-latest-pages-articles-multistream-index19.txt-p30121851p31308442> keluar $ 

Keseluruhan data input secara struktural berubah menjadi format baru! Selamat datang ke dunia yang menyeronokkan manipulasi data besar. Anda dapat melihat bagaimana dengan beberapa arahan bash sederhana, kami dapat menyusun semula/menukar fail secara substansial seperti yang kami anggap sesuai. Saya selalu menjumpai Bash Untuk menjadi yang paling dekat dengan toolset yang ideal untuk manipulasi data besar, digabungkan dengan beberapa alat luar dan mungkin pengekodan python. Salah satu sebab utama ini adalah banyak alat yang terdapat di bash yang menjadikan manipulasi data besar lebih mudah.

Mari kita sahkan kerja kita

WC -L enwiki-latest-pages-artikel-Multistream-index19.TXT-P30121851P31308442 329956 ENWIKI-LATEST-PAGES-Articles-Multistream-INTEX19.TXT -P30121851P31308442 $ WC -L OUT 329956 OUT $ GREP '31197816' OUT LINUX Adakah Rakan Saya 31197816 

Hebat - Bilangan baris yang sama ada di dalam asal dan fail yang diubah suai. Dan contoh khusus yang kami gunakan sebelum ini masih ada. Semua baik. Sekiranya anda suka, anda boleh menggali sedikit lagi dengan arahan seperti kepala dan ekor Terhadap kedua -dua fail untuk mengesahkan garis kelihatan betul berubah di seluruh papan.

Anda juga boleh mencuba dan membuka fail dalam editor teks kegemaran anda, tetapi saya secara peribadi akan mengesyorkan vi Oleh kerana bilangan baris mungkin besar, dan tidak semua editor teks berurusan dengan ini. vi mengambil sedikit masa untuk belajar, tetapi perjalanan itu patut diambil. Sebaik sahaja anda mendapat kebaikan vi, Anda tidak akan melihat ke belakang - ia tumbuh pada anda untuk bercakap.

Contoh 2: TR

Kita boleh menggunakan tr utiliti untuk menterjemahkan atau memadam beberapa watak:

$ grep '31197816' enwiki-latest-pages-articles-multistream-index19.TXT-P30121851P31308442 | tr ': "\ t' 269019710 31197816 Linux adalah kawan saya 

Di sini kita menukar kolon pemisah medan kita (:) ke tab (\ t). Mudah dan mudah, dan sintaks itu bercakap untuk dirinya sendiri.

Anda juga boleh menggunakan tr Untuk memadamkan watak:

$ grep '31197816' enwiki-latest-pages-articles-multistream-index19.TXT-P30121851P31308442 | tr -d ':' | tr -d '[0-9]' Linux adalah kawan saya 


Anda dapat melihat bagaimana kita mula -mula dikeluarkan : dari output dengan menggunakan padam (-d) Pilihan untuk tr, Dan seterusnya kami dikeluarkan - menggunakan ungkapan biasa - mana -mana nombor dalam julat 0-9 ([0-9]).

Perhatikan bagaimana menukar :: ke \ t Masih tidak membolehkan kita menggunakan AWK tanpa menukar pemisah medan, kerana kini terdapat kedua -dua tab (\ t) dan ruang dalam output, dan kedua -duanya dilihat secara lalai (dalam awk) sebagai pemisah bidang. Jadi percetakan $ 3 Dengan Awk membawa hanya perkataan pertama (sebelum ruang dilihat):

$ grep '31197816' enwiki-latest-pages-articles-multistream-index19.TXT-P30121851P31308442 | tr ': "\ t' | awk 'print $ 3' linux 

Ini juga menyoroti mengapa ia sentiasa sangat penting untuk menguji, menguji dan menguji lagi semua ungkapan biasa dan data yang mengubah/memanipulasi penyata arahan.

Kesimpulan

Banyak alat di bash membuat manipulasi data besar menyeronokkan dan dalam beberapa kes sangat mudah. Dalam artikel kedua ini dalam siri ini, kami terus meneroka alat bash yang dapat membantu kami dengan manipulasi data besar.

Nikmati perjalanan, tetapi ingat amaran yang diberikan pada akhir artikel pertama ... data besar nampaknya mempunyai minda itu sendiri, dan ada bahaya yang melekat dalam bekerja dengan banyak data (atau dengan beban input, seperti setiap hari kehidupan), dan ini adalah (terutamanya) persepsi yang berlebihan, kesempurnaan, masa hilang dan korteks prefrontal (dan kawasan otak lain) berlebihan. Semakin kompleks projek, data sumber atau format sasaran, semakin besar risiko. Bercakap dari banyak pengalaman di sini.

Cara yang baik untuk mengatasi bahaya ini adalah untuk menetapkan had masa yang ketat untuk bekerja dengan set data yang kompleks dan besar. Contohnya, 2 jam (pada maksimum) sehari. Anda akan terkejut apa yang dapat anda capai jika anda menetapkan fikiran anda untuk dua jam yang berdedikasi, dan jangan pergi ke atasnya, secara konsisten. Jangan katakan saya tidak memberi amaran kepada anda ๐Ÿ™‚

Marilah kita tahu pemikiran anda di bawah - set data besar yang menarik, strategi (kedua -dua teknikal dan gaya hidup/pendekatan), dan idea -idea lain dialu -alukan!

Tutorial Linux Berkaitan:

  • Manipulasi data besar untuk keseronokan dan keuntungan bahagian 3
  • Manipulasi data besar untuk keseronokan dan keuntungan bahagian 1
  • Perkara yang hendak dipasang di Ubuntu 20.04
  • Pengenalan kepada Automasi, Alat dan Teknik Linux
  • Perkara yang perlu dilakukan setelah memasang ubuntu 20.04 Focal Fossa Linux
  • Menguasai Gelung Skrip Bash
  • Gelung bersarang dalam skrip bash
  • Mint 20: Lebih baik daripada Ubuntu dan Microsoft Windows?
  • Mengendalikan input pengguna dalam skrip bash
  • Ubuntu 20.04 Trik dan Perkara yang Anda Tidak Tahu