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

คำสั่ง sort

     คำสั่ง sort เป็นคำสั่งที่ใช้ในการเรียงบรรทัดในไฟล์ข้อความตามตามตัวอักษร โดยเราเป็นผู้กำหนดคีย์ที่จะใช้ในการเรียงลำดับ ตัวอย่างการใช้งาน เช่น 

sort filename เป็นการเรียงลำดับบรรทัดในไฟล์ตามตัวอักษรโดยใช้ตัวอักษรแรกสุดของแต่ละบรรทัดเป็นคีย์ โดยไฟล์ filename คือชื่อไฟล์ที่เราต้องการดำเนินการ

cat filename1 filename2 | sort เป็นการรวมข้อความจาก 2 ไฟล์และเรียงลำดับ จากนั้นแสดงบนหน้าจอ

sort -r filename เป็นการเรียงลำดับบรรทัดในไฟล์แบบย้อนตัวอักษรโดยใช้ตัวอักษรแรกสุดของแต่ละบรรทัดเป็นคีย์ โดยไฟล์ filename คือชื่อไฟล์ที่เราต้องการดำเนินการ

sort -k 3 filename เป็นการเรียงลำดับบรรทัดในไฟล์ตามตัวอักษรโดยใช้ฟิลด์ที่ 3 แต่ละบรรทัดเป็นคีย์ โดยไฟล์ filename คือชื่อไฟล์ที่เราต้องการดำเนินการ

คำสั่ง uniq

     คำสั่ง uniq ใช้ในการลบบรรทัดที่มีคีย์ตามที่เรากำหนดซ้ำกัน โดยต้องเรียงลำดับบรรทัดด้วยคำสั่ง sort ก่อนจึงจะใช้คำสั่ง uniq ตัวอย่างเช่น “sort filename | uniq” หรือถ้าเราเอาข้อมูลจากหลายไฟล์มารวมกันเป็นไฟล์ใหม่และต้องการลบบรรทัดที่ซ้ำกันออกไปสามารถทำได้โดยใช้คำสั่ง “sort filename1 filename2 | uniq filename3”  หรือจะใช้คำสั่ง “sort -u filename1 filename2 > filename3“ ก็ได้เช่นกัน หากต้องการทราบจำนวนบรรทัดที่ซ้ำกันให้ใช้คำสั่ง “uniq -c filename”

คำสั่ง paste

     คำสั่ง paste เป็นคำสั่งที่ใช้ในการ merge  ข้อมูลของไฟล์เข้าด้วยกันในแบบบรรทัดต่อบรรทัด โดยคำสั่ง paste รู้จักรูปแบบข้อมูลในแบบตารางเหมือนกับคำสั่ง awk โดยเราสามารถระบุได้ว่าข้อมูลแต่ละฟิลด์คั่นตัวคั่น (delimiter) ด้วยอะไร โดยค่าตั้งต้นคำสั่ง paste จะมองหา space tab และ enter แต่เราสามารถบอกคำสั่ง paste ว่าใช้ตัวคั่นแบบอื่นได้โดยใช้ออปชั่น -d เช่น “paste -d ‘:’ ” เป็นการระบุว่าใช้ : เป็นตัวคั่น และยังมีออปชั่น  -s ที่เป็นการเปลี่ยนแกนในการ merge ข้อมูลเป็นแบบแนวนอน หากเราต้องการบันทึกผลลัพธ์ในไฟล์ใหม่ให้ใช้คำสั่ง > newfilename ต่อท้าย เช่น “paste -d ‘:’ filename1 filename2 > newfilename”

ตัวอย่างการใช้คำสั่ง paste

คำสั่ง Join

     คำสั่ง join เป็นคำสั่งที่ใช้ในการ merge  ข้อมูลของไฟล์เข้าด้วยกันตามคีย์ฟิลด์ที่กำหนดในแบบบรรทัดต่อบรรทัด ดังอย่างตามภาพ โดยค่าตั้งต้นจะใช้ฟิลด์แรกเป็นคีย์และแต่ละฟิลด์คั่นด้วย space

ภาพแสดงการใช้คำสั่ง join

คำสั่ง split

     คำสั่ง split เป็นคำสั่งที่ใช้ในการแบ่งไฟล์ออกเป็นหลายๆไฟล์ตามจำนวนบรรทัดที่กำหนดโดยที่ไฟล์เดิมยังคงอยู่เหมือนเดิมคำสั่ง split มักจะถูกใช้ในการแบ่งไฟล์ขนาดใหญ่ออกเป็นหลายๆไฟล์เพื่อให้ง่ายต่อการดูหรือจัดการโดยค่าตั้งต้นของคำสั่งคือแบ่งออกเป็นไฟล์ละ 1,000 บรรทัด ตัวอย่างการใช้คำสั่ง split เช่น split filename newfilename ซึ่งไฟล์ใหม่ที่ถูกสร้างขึ้นจะมีตัวอักษร running ต่อท้าย เช่น newfilenameaa newfilenameab เป็นต้น หรือสามารถกำหนดจำนวนบรรทัดเองได้ เช่น split -5 filename newfilename

Screenshot of the split american-english dictionary command and its output

ภาพแสดงการใช้คำสั่ง split

     จากตัวอย่างจะตัดแบ่งไฟล์ชื่อ american-english ซึ่งจากการตรวจสอบด้วยคำสั่ง wc -l american-english พบว่าไฟล์มีจำนวนบรรทัดเท่ากับ 99171 เราจึงตัดแบ่งไฟล์ด้วยคำสั่ง “split american-english dictionary” ซึ่งเราจะได้ผลลัพธ์เป็นไฟล์ที่ขึ้นต้นด้วยคำว่า dictionary เช่น dictionaryyaa dictionaryyab เป็นต้น

การค้นหาข้อความที่ต้องการ

     ในการค้นหาข้อความหรือส่วนของข้อความที่ต้องการเราจะใช้ Regular Expressions หรือเรียกย่อๆว่า regex ซึ่ง Regular Expressions คือ การกำหนดรูปแบบหรือกลุ่มคำเพื่อเอาไว้ใช้ค้นหาข้อความต่างๆตามรูปแบบที่เราต้องการ(Search Pattern) เราสามารถค้นหาได้ทั้งอักขระธรรมดา หรือค้นหาความข้อที่กำหนดไว้ หรือจะเป็นอักขระพิเศษก็สามารถค้นหาได้ และสามารถค้นหาตามตำแหน่งที่กำหนดได้ เช่น หาที่ต้นบรรทัดหรือท้ายบรรทัด หรือต้นคำหรือท้ายคำ regex ประกอบด้วยตัวอักษรธรรมและอักขระพิเศษอย่าง * และ $

       เราสามารถใช้งาน regex กับโปรแกรมจัดการไฟล์ข้อความ เช่น vi sed awk find และ grep ได้ด้วย ตัวอย่างการใช้ regex เช่น สมมุติเรามีข้อความว่า “the quick brown fox jumped over the lazy dog” ดังนั้น

ค้นหาด้วย ผลลัพธ์ คำอธิบาย

a.. azy . (จุด) หมายถึงอักษรอะไร

ก็ได้

b.|j. br หรือ ju | หมายถึง หรือ

..$ og $ หมายถึง หาจากท้าย

ข้อความ

l.* lazy dog * หมายถึงทั้งหมด เลยรวมกับ

จุดเป็น อะไรก็ได้ทั้งหมด 

l.*y lazy * หมายถึงทั้งหมดถึง y

the.* ทั้งประโยค * หมายถึงทั้งหมด 

คำสั่ง grep

     คำสั่ง grep เป็นคำสั่งที่ใช้กันอย่างแพร่หลายในการค้นหาข้อความที่ต้องการ โดยจะค้นหารูปแบบของข้อความตามที่กำหนด และสามารถใช้ regex ได้ ตัวอย่างการใช้งาน เช่น 

grep pattern filename เป็นการค้นหาตามรูปแบบที่ระบุและพิมพ์บรรทัดที่หาพบ โดย pattern  คือรูปแบบของคำที่ต้องการค้นหา และ filename คือชื่อไฟล์ที่ต้องการค้นหา

grep -v pattern filename  เป็นการค้นหาตามรูปแบบที่ระบุและพิมพ์บรรทัดที่หาไม่พบ โดย pattern  คือรูปแบบของคำที่ต้องการค้นหา และ filename คือชื่อไฟล์ที่ต้องการค้นหา

grep 0-9 filename พิมพ์บรรทัดที่มีเลข 0-9 โดย 0-9 คือรูปแบบของคำที่ต้องการค้นหา และ filename คือชื่อไฟล์ที่ต้องการค้นหา

grep -C 3 pattern filename พิมพ์ 3 บรรทัดก่อนหน้าและหลังของบรรทัดที่พบข้อความ โดย pattern  คือรูปแบบของคำที่ต้องการค้นหา และ filename คือชื่อไฟล์ที่ต้องการค้นหา

ตัวอย่างการใช้งานคำสั่ง grep

คำสั่ง strings

     คำสั่ง strings เป็นคำสั่งที่ใช้ในการสกัด (extract) เอาข้อความที่สามารถพิมพ์โดยเครื่องพิมพ์หรือแสดงบนหน้าจอได้จากไฟล์ มีประโยชน์ในการเอาข้อความที่คนอ่านรู้เรื่องออกมาจากไฟล์โปรแกรมที่คอมไฟล์แล้ว (Binary File) แต่ถ้าเป็นการค้นหาข้อความจากไฟล์ข้อความให้ใช้ grep จะสะดวกกว่า ในการใช้คำสั่ง strings เรามักจะใช้คู่กับคำสั่ง grep เพราะคำสั่ง strings จะเอาข้อความทั้งหมดออกมาซึ่งอาจจะเยอะมาก หากเราพอจะรู้ว่าเราค้นหาข้อความประมาณไหน เราสามารถใช้คำสั่ง strings filename | grep pattern โดย pattern  คือรูปแบบของคำที่ต้องการค้นหา เพื่อให้ได้ผลลัพธ์ที่แม่นยำมากขึ้น

ตัวอย่างการใช้งานคำสั่ง strings

คำสั่ง tr

     คำสั่ง tr เป็นเครื่องมือในการแปลงตัวอักษรแต่ละตัวหรือลบตัวอักษรออกไป เราสามารถใช้เครื่องมือนี้ในการจัดการกับไฟล์ข้อความ เช่น เปลี่ยนขนาดของตัวอักษร หรือใช้ในการนับคำ นับบรรทัด หรือนับจำนวนตัวอักษร โดยมีรูปแบบการใช้งานคือ tr [options] ‘text1’ [‘text2’]  โดย text1 คือข้อความที่ต้องการแก้ไขหรือลบออก text2 คือข้อความที่จะใช้แทนที่ข้อความใน text1 เราจะใช้ ‘ ‘ ครอบข้อความไว้เสมอเพื่อป้องกันมิให้โปรแกรมเชลล์เข้าใจว่าข้อความเป็นคำสั่งอย่างหนึ่งอย่างใด และทั้ง option และ text2 จะมีหรือไม่มีก็ได้ ตัวอย่างการใช้งาน เช่น

cat filename | tr a-z A-Z

เป็นการแสดงเนื้อหาของไฟล์โดยให้แปลงเป็นตัวอักษรใหญ่ทั้งหมด

tr ‘{}’ ‘()’ inputFileName outputFileName

เป็นการแก้ไขชนิดของวงเล็บในไฟล์ inputFileName และบันทึกผลลัพธ์ในไฟล์ outPutFileName

echo “This is for testing” | tr [:space:] ‘\t’

เป็นการแก้ไขจาก space เป็น tab

echo “the geek stuff” | tr -d ‘t’

เป็นการใช้ออปชั่น -d เพื่อลบตัวอักร t

echo “This   is   for    testing” | tr -s [:space:]

เป็นการใช้ออปชั่น -s ลดอักขระ space ที่ติดกันหลายตัวให้เหลือตัวเดียว

echo “my username is 432234” | tr -cd [:digit:]

เป็นการเอาตัวอักษรที่ไม่ได้เป็นตัวเลขออกได้ผลลัพธ์คือ 432234

tr -cd [:print:] < file.txt

เป็นการเอาตัวอักษรที่พิมพ์ไม่ได้ (พวก control character) ออกจากไฟล์

tr -s ‘\n’ ‘ ‘ < file.txt

เป็นการเอาบรรทัดทุกบรรทัดในไฟล์มาต่อกันเป็นบรรทัดเดียว

คำสั่ง tee

     คำสั่ง tee เป็นคำสั่งที่เอาผลลัพธ์ที่แสดงบนหน้าจอไปเขียนลงในไฟล์ด้วย เช่น หากเราใช้คำสั่ง ls -l ผลลัพธ์คือการแสดงรายการไดเร็คทอรี่บนหน้าจอ และถ้าเราใช้คำสั่ง ls -l | tee filename ผลลัพธ์จะถูกบันทึกลงในไฟล์ด้วย

ตัวอย่างการใช้งานคำสั่ง tee

คำสั่ง wc

     คำสั่ง wc (word count) เป็นคำสั่งที่ใช้นับจำนวนบรรทัด ( -l )คำ (-w) หรือตัวอักษร (-c) 

ตัวอย่างการใช้งานคำสั่ง wc

คำสั่ง cut

     คำสั่ง cut เป็นคำสั่งที่ใช้ในการจัดการไฟล์ที่มีการแสดงข้อมูลในลักษณะคอลัมภ์ที่ใช้ tab เป็นตัวคั่น (delimiter) เพื่อตัดเอาข้อมูลเฉพาะคอลัมภ์ที่ต้องการออกมา เราสามารถกำหนดผ่านออปชั่นให้อ่านตัวคั่นแบบอื่นได้ด้วย เช่น  ls -l | cut -d” ” -f3 เป็นการกำหนดให้อ่านตัวคั่นที่เป็น space

ตัวอย่างการใช้งานคำสั่ง cut