Bash Command ที่ควรรู้สำหรับ Data Scientist
Tags: bash, datasci
Published: 2020-09-12 16:15:28

---
title: Bash Command ที่ควรรู้สำหรับ Data Scientist
published: true
date: 2020-05-23 17:00:00 UTC
tags: bash,datasci
canonical_url: https://narongdej.dev/blog/th/2020/05/24/bash-command-for-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/<name> ถ้าเป็น Windows ก็จะตอบกลับประมาณ C:\Users\<name></name></name>

`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](https://regex101.com) ตัวอย่างเช่นเราต้องการหาบรรทัดที่มีคำว่า 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 ทั้งหมดได้ที่[ลิงค์นี้](https://courses.cs.washington.edu/courses/cse390a/14au/bash.html)ครับ