Bash Command ที่ควรรู้สำหรับ Data Scientist

หากคุณเคยใช้ OS อื่นไม่ใช่ Windows คงเคยได้ใช้ Bash กันมาก่อนอย่างแน่นอนไม่มากก็น้อย

Bash หรือ Bourne Again Shell เป็น default shell ในหลายๆ Linux Distribution ที่เรารู้จักกันดีเช่น Ubuntu กับบน Apple macOS (แต่หลังจาก macOS Catalina ก็เปลี่ยนมาใช้ zsh แทนแล้ว)

แต่ถึงอย่างนั้นผมก็คิดว่าเราควรเรียน Bash Scripting แบบเบื้องต้นกันไว้บ้าง เพราะมันมากับในหลายๆ OS ซึ่งจะทำให้เราสามารถใช้งานมันได้เลยโดยไม่ต้องลงอะไรเพื่มเลย

สำหรับการทำงานในสาย Data Scientist หรือ Data Engineer เราต้องทำการอ่าน Data แก้ไข ทำความเข้าไฟล์ตลอด บางทีไฟล์นั้นอาจจะไม่ได้อยู่ในเครื่องของคุณ แต่อยู่ใน Server ที่สามารถเข้าถึงได้โดยใช้ Command Line เท่านั้น มีโอกาสสูงที่โปรแกรมที่คุณเปิดเข้าไปเจอจะเป็น Bash

Basic Commands

1. การเปิด Manual

man: หรือ manual เป็นคำสั่งที่ทุกคนควรรู้ มันคือคำสั่งที่เราสามารถพิมพ์ man <ชื่อ command> เพื่อดู manual สำหรับ command นั้น ถ้าตอนนี้คุณยังไม่รู้จะพิมพ์ command อะไร ลองพิมพ์ man man เพื่อดู manual ของ command man ก่อนก็ได้

กด q เพื่อออกจาก man page และสำหรับการ search คุณสามารถพิมพ์ /<สิ่งที่ต้องการ search> เช่น /whatis โดยสามารถกด n เพื่อไปที่ match อันต่อไป หรือกด Shift+n เพื่อกลับมา match ก่อนหน้า

2. การเปลี่ยนและดูข้อมูลของ Working directory

pwd: เวลาเราอยากรู้ว่าตอนนี้เราอยู่ที่ directory (folder) ไหน คุณสามารถพิมพ์ pwd เข้าไปใน bash แล้ว bash ก็จะตอบกลับมาเป็น Full path ของ directory ที่เราอยู่

bash-3.2$ pwd
/Users/narongdejsrn

ในที่นี้ผมอยู่ใน Folder home ของ macOS ซึ่งจะเรื่มต้นด้วย /Users/ ถ้าเป็น Windows ก็จะตอบกลับประมาณ C:\Users\

ls: สำหรับดู​ว่าใน Working directory มีไฟล์อะไรบ้าง คุณสามารถพิมพ์ ls เพื่อแสดงรายชื่อของไฟล์ สำหรับดูไฟล์ให้ระเอียดมากยิ่งขึ้นสามารถพิมพ์ ls -l หรือจะพิมพ์ ls -la หากคุณต้องการแสดงไฟล์ที่เรื่มต้นด้วย . ด้วย

bash-3.2$ ls
404.html                README.md               _pages                  _sass                   build                   mermaid                 tag_generator.py
CNAME                   _config.yml             _plugins                _site                   favicon.png             robots.txt              tags.rb
Gemfile                 _includes               _posts                  assets                  feed.json               styles.scss
Gemfile.lock            _layouts                _projects               atom.xml                index.html              tag

cd: สำหรับการเปลี่ยน folder คุณสามารถทำการ cd <fullpath> หรือทำการ cd แบบ relative ได้โดยการทำ cd ./<relative_folder> หรือ cd ../ เพื่อออกไป folder ก่อนหน้า

3. การอ่านและหาข้อมูลในไฟล์

cat: สำหรับการเปิดอ่านไฟล์ เช่น cat data.txt bash ก็จะทำการปรินต์ตัวอักษรใน data.txt ออกมา

grep: สำหรับการหาบรรทัดโดยใช้ regular expression สำหรับคนที่ไม่รู้ regular expression ให้ลองไปเล่นที่เว็บไซต์ regex101 ตัวอย่างเช่นเราต้องการหาบรรทัดที่มีคำว่า Bangkok ในไฟล์ data.txt เราสามารถทำการพิมพ์ cat data.txt | grep "Bangkok" สิ่งที่เราทำตอนนี้คืออ่าน data จากไฟล์ data.txt ผ่าน command cat และทำการ pipe (การโยนข้อมูล) เข้าไปที่ command grep

head: ถ้าเราต้องการอ่านบรรทัดแรกของไฟล์เราสามารถทำการพิมพ์ head -n <จำนวนบรรทัดที่ต้องการอ่าน> <ชื่อไฟล์> เช่น head -n 5 data.txt หรือจะ pipe เข้ามาก็ได้ cat data.txt | head -n 5

tail: เหมือน head ด้านบน แต่อ่านจากบรรทัดล่างสุด

wc: นับคำ -w นับบรรทัด -l หรือนับตัวอักษร -m เช่นหากคุณต้องการนับบรรทัดในไฟล์คุณสามารถพิมพ์ wc -l data.txt หรือจะ pipe เข้ามาเหมือนเดิมก็ได้

sed: อ่านและแก้ไขไฟล์โดยใช้ regular expression เช่นหากคุณต้องการเปลี่ยนคำว่า hi เป็น hello ในไฟล์ data คุณสามารถทำการพิมพ์ sed "s/hi/hello/g" data.txt หลังจากนั้นคุณสามารถ redirect output เข้าไฟล์ได้ด้วยการต่อท้ายด้วย sed "s/hi/hello/g" data.txt > output.txt หรือจะใช้ -i ก็ได้ sed -i "s/hi/hello/g" data.txt


สุดท้าย Bash ยังสามารถทำอะไรได้อีกเยอะ ไว้ว่างๆจะมาเขียนเรื่อง Bash Scripting ต่อนะครับ ระหว่างนี้สามารถเข้าไป Command Bash ทั้งหมดได้ที่ลิงค์นี้ครับ