ข้ามไปยังเนื้อหา
กลับหน้ารายการบทความ

Nushell: แปลงข้อมูลใน command line ด้วย pipeline แบบมีโครงสร้าง

เริ่มใช้ Nushell กับตารางและ record เพื่อกรองข้อมูลจากไฟล์ ลดการ parse ข้อความ และระวังการต่อกับคำสั่งภายนอก

Nushell: แปลงข้อมูลใน command line ด้วย pipeline แบบมีโครงสร้าง

Nushell หรือ Nu เป็น shell ที่ส่งข้อมูลแบบมีชนิดผ่าน pipeline แทนการส่งข้อความล้วนเป็นหลัก คำสั่งที่ได้ผลเป็นตาราง record หรือ list จึงกรองคอลัมน์และแปลงข้อมูลได้โดยไม่ต้องตัดสตริงเองทุกครั้ง แนวคิดนี้เหมาะกับงานสำรวจไฟล์ log และข้อมูล JSON ที่ทีมต้องทำซ้ำ

ความต่างจาก shell แบบข้อความ

ใน shell แบบเดิม หลายงานเริ่มจากข้อความแล้วใช้ grep, awk หรือ cut เพื่อดึงคอลัมน์ แต่ Nu มองผลลัพธ์เป็นข้อมูลมีโครงสร้าง เช่น ls แสดงรายการไฟล์เป็นตารางที่มีชื่อ ขนาด และเวลา จึงต่อด้วยคำสั่งที่เข้าถึงฟิลด์ได้โดยตรง ตามคู่มือ Nu pipeline มีต้นทาง ตัวกรอง และปลายทาง ตัวอย่างจากเอกสารคือ open Cargo.toml | update workspace.dependencies.base64 0.24.2 | save Cargo_new.toml: อ่านไฟล์ แก้ค่าเฉพาะจุด แล้วบันทึกเป็นไฟล์ใหม่

ก่อนใช้กับไฟล์จริง ให้ทำสำเนาหรือกำหนดชื่อ output ใหม่เสมอ การสั่ง save ทับไฟล์ตั้งค่าทันทีอาจทำให้รูปแบบหรือคอมเมนต์เดิมหายไปตามพฤติกรรมของ parser/serializer ที่ใช้

เริ่มทดลองทีละขั้น

ติดตั้ง Nu ตามคู่มือระบบปฏิบัติการ แล้วเปิดด้วย nu ลอง ls เพื่อดูตาราง จากนั้นลอง ls | get name เพื่อดึงคอลัมน์ชื่อไฟล์ การใช้ get กับชื่อคอลัมน์จริงช่วยให้เห็นว่าข้อมูลผ่านท่อยังไม่กลายเป็นข้อความธรรมดา ถ้าชื่อคอลัมน์ไม่ตรง ให้ดูตารางหรือใช้ help ก่อน ไม่ควรคาดเดาตามรูปแบบคำสั่งของ shell อื่น

สำหรับ JSON ลองสร้างไฟล์ทดลองที่ไม่มีข้อมูลลับ แล้วใช้ open sample.json เพื่อดูว่าระเบียนถูกโหลดเป็นโครงสร้างอย่างไร จากนั้นค่อยเลือกฟิลด์ที่ต้องใช้ การทดสอบด้วยไฟล์เล็กก่อนช่วยจับความต่างของชนิดข้อมูล เช่น ตัวเลข สตริง และ null ซึ่งมีผลต่อการกรองและการเปรียบเทียบ

แบ่ง pipeline ที่ยาวให้อ่านได้

เมื่อคำสั่งหลายขั้นเริ่มอ่านยาก คู่มือแนะนำให้ครอบ pipeline หลายบรรทัดด้วยวงเล็บ และใช้ let เก็บผลชั่วคราวได้ ตัวอย่าง:

let names = (ls | get name)
$names

โครงนี้เหมาะกับการตรวจผลแต่ละขั้นก่อนใส่ตัวกรองเพิ่ม ถ้างานจะเขียนไฟล์ออก ให้รัน pipeline โดยหยุดก่อน save เพื่อดูผลในจอก่อน แล้วค่อยบันทึก การทำเช่นนี้ช่วยลดความเสี่ยงจากการเลือกคอลัมน์ผิด

ข้อควรระวังเมื่อต่อคำสั่งภายนอก

เครื่องมือ command line จำนวนมากยังรับและส่ง byte หรือข้อความธรรมดา การเชื่อม pipeline ของ Nu กับคำสั่งภายนอกจึงอาจต้องแปลงชนิดหรือจัดรูปแบบผลลัพธ์ก่อน อย่าคิดว่าคำสั่งภายนอกเข้าใจ table ของ Nu โดยอัตโนมัติ นอกจากนี้ syntax ของ Nu ต่างจาก Bash/PowerShell พอสมควร สคริปต์เดิมไม่ควรถูกคัดลอกมาแล้วคาดว่าจะรันได้ทันที

เริ่มจากงานอ่านข้อมูลที่ตรวจผลได้ เช่น รายการไฟล์หรือ JSON ที่ไม่สำคัญ แล้ววัดว่าคำสั่งสั้นลงและผิดพลาดน้อยลงจริงหรือไม่ ก่อนย้ายสคริปต์ production

อ่านเพิ่มเติม: Nushell Pipelines และ Nu Fundamentals