ก่อนหน้านี้แอดมินเข้าใจว่าการที่เราจะเป็น Data Scientist หรือทำงานด้าน Data Science เรียน Python / R / SQL ก็พอล่ะ แต่เมื่อไม่กี่วันที่ผ่านมาเรียนแล็บเรื่อง Big Data ต้องมาใช้ Unix ด้วย 555 #ในเลขห้ามีน้ำตาซ่อนอยู่
บางคนอาจจะเรียก Command Line หรือใน Mac เรียก Terminal ก็ครือ ๆ กันนะฮะ มันคือไอ้หน้าต่างดำ ๆ ตัวหนังสือเขียว ๆ ที่เห็นในหนังแฮคเกอร์นั่นเอง
สาเหตุที่ต้องเรียนคำสั่งของ Unix ก็เพราะ บางทีไฟล์ Data ใหญ่มากหลาย GB จะเอามาโหลดเข้า Python หรือ R ก็น้านนาน เค้าเลยใช้ Unix เปิดดูไฟล์คร่าว ๆ ก่อนเอาไปใช้งาน มันเร็วมากขอบอก
ในบทความนี้เราจะมารู้จักคำสั่งพื้นฐานของ Unix กันครับ
คำสั่งที่น่าสนใจของ Unix
- ls:
ไว้ดูไฟล์ทั้งโฟลเดอร์ - cd:
ไว้เข้า – ออกโฟลเดอร์ เช่น cd /ชื่อโฟลเดอร์/ - pwd:
ไว้ดู Path โฟลเดอร์ปัจจุบัน อันนี้มีประโยชน์กว่าที่คิด เพราะบางทีเราลืมว่าอยู่ในโฟลเดอร์ไหนแล้ว - gunzip:
แกะซิปได้ด้วย อันนี้ไม่เคยรู้มาก่อน - less xxxx.txt:
เปิดอ่านไฟล์ xxxx.txt เป็นการเปิดแบบไม่ได้โหลดทั้งไฟล์ลง Memory ทำให้เร็วมาก จะแสดงแค่ทีละส่วนของไฟล์ อยากดูต่อก็กด Space Bar ไปเรื่อย ๆ สบายใจ ส่วนถ้าจะออกก็กด q - grep “Title” xxxx.txt:
หาคำว่า Title ใน xxxx.txt มาแสดงพร้อมคำที่อยู่ใกล้ ๆ คำนั้น มีประโยชน์เวลาเรารู้ว่าทุกไฟล์จะมีบรรทัดแบบ “Title:” ตามด้วยชื่อเรื่องอยู่ แล้วเราอยากรู้ว่าชื่อเรื่องในไฟล์นี้มีชื่ออะไรบ้าง - wc xxxx.txt:
Word Count นับจำนวนบรรทัด จำนวนคำ จำนวนตัวหนังสือในไฟล์ - cat xxxx.txt:
อ่านไฟล์แบบอ่านทั้งไฟล์ในทีเดียว แต่เราจะไม่ค่อยได้ใช้เดี่ยว ๆ (เพราะถ้าจะอ่านไฟล์เฉย ๆ ใช้คำสั่ง less ดีกว่า ไม่ต้องเปิดทีเดียวทั้งไฟล์) เรามักใช้ cat คู่กับ Operator | หรือที่เรียกว่า pipe โดยหน้าตา pipe จะคล้าย ๆ ตัว l แต่ยาวกว่า เดี๋ยวมารู้จักกับ Pipe ให้มากขึ้นกันครับ
ตัวอย่างการใช้ Pipe เชื่อมคำสั่ง Unix เข้าด้วยกัน
Pipe ใน Unix มีประโยชน์มากตรงที่ทำให้เราสามารถเชื่อมคำสั่งต่าง ๆ ต่อกันได้ในบรรทัดเดียว เอาไว้ส่งค่าในไฟล์ไปหาคำสั่งอื่นต่อ ตัวอย่างการใช้ pipe ก็เช่น
- cat xxx.csv.gz | gunzip | less
อันนี้คือเปิดไฟล์ xxx.csv.gz แล้ว unzip ต่อ แล้วเอาไปเปิดด้วยคำสั่ง less - cat xxx.csv.gz | gunzip | wc
เปิดไฟล์ > unzip > แล้วนับคำ - ตัวอย่างแบบซับซ้อนหน่อย: cat xxx.csv.gz | gunzip | head -n1000 > first_1000_lines.txt
เปิดไฟล์ xxx.csv.gz > unzip > ดึง 1000 บรรทัดแรก > เซฟลงไฟล์ first_1000_lines.txt
เหมาะกับเวลาที่ไฟล์ที่เราต้องการใช้งานมีขนาดใหญ่มาก ๆ เราแค่ต้องการข้อมูลแถวแรก ๆ เอาไปโยนใส่ Python / R เพื่อประมวลผลต่อแบบเร็ว ๆ - อีกตัวอย่างที่มีประโยชน์มาก: cat xxx.csv.gz | gunzip | awk -F’,’ ‘{print $6,$7,$14}’ | less
เปิดไฟล์ > unzip > ลูปแต่ละบรรทัด แบ่งคอลัมน์ด้วย , และเลือกคอลัมน์ที่ 6 7 14 > แสดงผล
เหมาะมากเวลาที่เราอยากอ่านเฉพาะบางคอลัมน์ของไฟล์ CSV - หรือเอามา Filter ข้อมูลก็ยังได้: unzip -p xxx.zip | awk -F’,’ ‘$1=”Chillchill” {print $6,$7,$14}’ > chillchill.txt
unzip แล้วส่งค่าใส่ pipe (ใช้ -p) > ลูปแต่ละบรรทัด แบ่งคอลัมน์ด้วย , ถ้าคอลัมน์แรกมีค่า “Chillchill” ให้แสดงผลคอลัมน์ที่ 6 7 14 > เก็บลงไฟล์ chillchill.txt
จะเห็นว่า Unix เทพมาก ทำอะไรได้หลายอย่าง ถ้ามี Data Frame บน Unix นี่คงมีคนทำ Package มาไว้ทำ Data Analysis บนนี้เลย (หรือมีก็ไม่รู้ แต่ขอไปเขียน Python / R ดีกว่า ดูง่ายกว่าเยอะเลยครับ)
ป.ล. ถ้าใครสนใจลองเล่น Unix แล้วใช้ Mac OS / Linux (หรือ Ubuntu) ก็เปิด Terminal มาพิมพ์คำสั่งด้านบนนี้เพื่อใช้ได้เลยครับ แต่ถ้าใช้ Windows ลองดาวน์โหลด Git Bash หรือ WSL (Windows Subsystem for Linux) มาครับผม