คำสั่ง wc: นับจำนวนบรรทัด จำนวนคำ และการใช้ wc -l กับไปป์
คำสั่ง wc คือคำสั่ง Linux ที่นับและแสดงจำนวนบรรทัด จำนวนคำ และจำนวนไบต์ของไฟล์ เมื่อนับบรรทัดของไฟล์ตัวอย่างบันทึกการเข้าถึงของเว็บเซิร์ฟเวอร์ด้วย wc -l จะได้ 10 และถ้าใช้ grep กรองเฉพาะการตอบกลับ 404 แล้วส่งต่อให้ wc -l คุณจะเห็นจำนวนคำขอที่ล้มเหลวคือ 3 เป็นตัวเลขเดียว
บันทึก เนื้อหาไฟล์ และโฟลเดอร์ทำงาน /root/work ด้านล่างเป็นค่าตัวอย่าง บันทึกนี้เป็นไฟล์สิบบรรทัดที่สร้างจากที่อยู่ IP สำหรับเอกสาร และไฟล์อื่นๆ ก็สร้างขึ้นเพื่อการทดสอบทั้งหมด
1️⃣ การใช้งานพื้นฐานของคำสั่ง wc และการอ่านผลลัพธ์
รูปแบบพื้นฐานของคำสั่งคือ wc ตามด้วยตัวเลือก แล้วจึงเป็นไฟล์ ถ้าระบุเพียงไฟล์โดยไม่ใส่ตัวเลือก wc จะแสดงจำนวนบรรทัด จำนวนคำ และจำนวนไบต์ตามลำดับ แล้วต่อท้ายด้วยชื่อไฟล์
cd /root/workwc access.log 10 100 766 access.logในผลการนับบันทึกการเข้าถึง 10 คือจำนวนบรรทัด 100 คือจำนวนคำ และ 766 คือจำนวนไบต์
ถ้าต้องการดูตัวเลขเดียว ให้เพิ่ม -l, -w หรือ -c อย่างใดอย่างหนึ่ง
wc -l access.log10 access.logwc -w access.log100 access.logwc -c access.log766 access.logถ้าระบุไฟล์ที่ไม่มีอยู่ จะมีข้อความแสดงข้อผิดพลาดและรหัสสิ้นสุดเป็น 1
wc nosuch.txtwc: nosuch.txt: No such file or directoryecho $?12️⃣ การนับบรรทัดด้วย wc -l และไปป์
เมื่อนับบรรทัดแล้วมีชื่อไฟล์ติดออกมาด้วย ตอนเก็บตัวเลขไว้ในตัวแปรของสคริปต์ คุณต้องตัดชื่อไฟล์ออกอีกครั้ง ถ้าส่งไฟล์ผ่านการเปลี่ยนทิศทาง (<) หรือไปป์ wc จะไม่รู้ชื่อไฟล์ จึงแสดงเฉพาะตัวเลข
wc -l < access.log10cat access.log | wc -l10ถ้าวาง grep ไว้หน้าไปป์ คุณจะนับได้เฉพาะบรรทัดที่ตรงตามเงื่อนไข การค้นหารวมช่องว่างหน้าและหลังรหัสการตอบกลับ 404 ด้วย และมีบรรทัดที่มี 404 อยู่สามบรรทัด
grep ' 404 ' access.log | wc -l3เมื่อต้องการนับว่ามี IP ที่เชื่อมต่อเข้ามากี่ตัว ให้ตัดเฉพาะช่องแรก ลบบรรทัดที่ซ้ำด้วย sort -u แล้วจึงนับ ในบันทึกสิบบรรทัดนี้มี IP ที่ไม่ซ้ำกันสี่ตัว
cut -d ' ' -f 1 access.log | sort -u192.0.2.10
192.0.2.44
198.51.100.7
203.0.113.25cut -d ' ' -f 1 access.log | sort -u | wc -l4wc -l นับจำนวนอักขระขึ้นบรรทัดใหม่ ดังนั้นไฟล์ที่ท้ายบรรทัดสุดท้ายไม่มีอักขระขึ้นบรรทัดใหม่ แม้ cat จะแสดงสองบรรทัด wc -l ก็จะแสดง 1
cat no-newline.txtfirst line
last linewc -l no-newline.txt1 no-newline.txtถ้าจำนวนบรรทัดออกมาน้อยไปหนึ่ง ให้ตรวจสอบก่อนว่าท้ายบรรทัดสุดท้ายมีอักขระขึ้นบรรทัดใหม่หรือไม่
3️⃣ ตัวเลือกของ wc และจำนวนอักขระด้วย -c, -m
ใน UTF-8 ตัวอักษรภาษาอังกฤษและตัวเลขใช้ 1 ไบต์ต่ออักขระ ส่วนอักษรเกาหลี (ฮันกึล) และ ☕ ใช้ตัวละ 3 ไบต์ ดังนั้นไฟล์ที่มีแต่ข้อความภาษาอังกฤษ จำนวนไบต์ที่นับด้วย -c กับจำนวนอักขระที่นับด้วย -m จะเท่ากัน แต่เมื่อมีภาษาเกาหลี ตัวเลขทั้งสองจะต่างกัน การเปรียบเทียบนี้ใช้ไฟล์ที่มีชื่อเมนูภาษาเกาหลีสองบรรทัดและภาษาอังกฤษหนึ่งบรรทัด
cat menu.txt아메리카노
카페 라테 ☕
teawc -c menu.txt38 menu.txtwc -m menu.txt18 menu.txt-c ได้ 38 และ -m ได้ 18 ต่างกัน 20 ซึ่งเป็นส่วนที่อักษรเกาหลีเก้าตัวและ ☕ ใช้เพิ่มตัวละ 2 ไบต์ ดังนั้นไฟล์ที่มีภาษาเกาหลีต้องนับด้วย -m จึงจะตรงกับจำนวนอักขระจริง การวัดทำในโลแคล C.UTF-8 และตามคู่มือ -m นับตามหน่วยอักขระของโลแคล
-L แสดงความกว้างในการแสดงผลของบรรทัดที่ยาวที่สุด ในบันทึกการเข้าถึง บรรทัดที่ยาวที่สุดกว้าง 82 คอลัมน์ ส่วนไฟล์เมนู อักษรเกาหลีและ ☕ ใช้ตัวละสองคอลัมน์ บรรทัดที่มี 7 อักขระจึงได้ 12
wc -L access.log82 access.logwc -L menu.txt12 menu.txtอักษรละตินที่มีเครื่องหมายเน้นเสียงใช้ 2 ไบต์ต่ออักขระใน UTF-8 ซึ่งวัดแยกด้วยไฟล์ที่มีเพียงบรรทัดเดียวคือ café
cat cafe.txtcaféwc -c cafe.txt6 cafe.txtwc -m cafe.txt5 cafe.txt-c ได้ 6 และ -m ได้ 5 เพราะ é ตัวเดียวใช้เพิ่ม 1 ไบต์ ตัวอักษรภาษาอังกฤษและตัวเลขใช้ 1 ไบต์ อักษรที่มีเครื่องหมายเน้นเสียงอย่าง é ใช้ 2 ไบต์ ส่วนอักษรเกาหลีและ ☕ ใช้ 3 ไบต์ แม้จำนวนอักขระเท่ากัน จำนวนไบต์จึงต่างกันได้
ตารางนี้รวบรวมคำสั่งที่เหมาะกับงานแต่ละอย่าง พร้อมตัวเลขที่นับได้ในบทความนี้
| งานที่ต้องการทำ | คำสั่ง | ผลวัดในบทความนี้ |
|---|---|---|
| รับเฉพาะจำนวนบรรทัดเป็นตัวเลข | wc -l < access.log | 10ตัวเลขอย่างเดียว ไม่มีชื่อไฟล์ |
| นับบรรทัดที่ตรงตามเงื่อนไข | grep ‘ 404 ‘ access.log | wc -l | 3บรรทัดที่ตอบกลับ 404 |
| นับค่าที่ไม่ซ้ำกัน | cut -d ‘ ‘ -f 1 access.log | sort -u | wc -l | 4จำนวน IP ที่ไม่ซ้ำกัน |
| ตรวจสอบขนาดไฟล์ | wc -c access.log | 766จำนวนไบต์ |
| จำนวนอักขระของไฟล์ที่มีภาษาเกาหลี | wc -m menu.txt | 18ถ้านับไฟล์เดียวกันด้วย -c ได้ 38 |
| ความกว้างในการแสดงผลของบรรทัดที่ยาวที่สุด | wc -L access.log | 82ไฟล์เมนูนับอักษรเกาหลีหนึ่งตัวเป็นสองคอลัมน์ จึงได้ 12 |
| ผลรวมจำนวนบรรทัดของหลายไฟล์ | wc -l *.log | 13ผลรวมอยู่ในบรรทัด total |
4️⃣ ผลรวมของหลายไฟล์ด้วย wc บน Linux
ถ้าระบุหลายไฟล์ wc จะแสดงไฟล์ละหนึ่งบรรทัด และเพิ่มผลรวมไว้ในบรรทัดสุดท้ายเป็น total เมื่อนับบันทึกการเข้าถึงกับบันทึกข้อผิดพลาดพร้อมกัน 13 ในบรรทัด total คือผลรวมจำนวนบรรทัดของทั้งสองไฟล์
wc access.log error.log 10 100 766 access.log
3 11 76 error.log
13 111 842 totalเมื่อต้องการนับบันทึกที่มีนามสกุลเดียวกันพร้อมกัน ให้ใช้ไวลด์การ์ด เชลล์จะแปลง *.log เป็นชื่อไฟล์ก่อนส่งต่อ ผลลัพธ์จึงเหมือนกับการเขียนชื่อไฟล์ทีละชื่อ
wc -l *.log 10 access.log
3 error.log
13 totalไฟล์ที่นามสกุลต่างกันก็นับพร้อมกันได้ ถ้าเขียนชื่อต่อกัน ผลการนับบันทึกสองไฟล์กับไฟล์เมนูพร้อมกันคือ total 16
wc -l access.log error.log menu.txt 10 access.log
3 error.log
3 menu.txt
16 total🔲 ตัวจำลองคำสั่ง wc
ในตัวจำลองด้านล่าง คุณพิมพ์ wc เองกับไฟล์ตัวอย่างในบทความได้ ใช้ปุ่มชิปลอง -l, -m และการนับผ่านไปป์ได้ และถ้าเพิ่มบรรทัดลงใน access.log แล้วนับใหม่ จะเห็นตัวเลขที่เพิ่มขึ้น
🔢 FAQ & เนื้อหาแนะนำ
Linux · ข้อความ
คำสั่ง sort ของ Linux: การเรียงไฟล์
ตัวเลือกและตัวอย่างการใช้ sort เพื่อเรียงเนื้อหาไฟล์ตามตัวอักษร จากน้อยไปมาก หรือจากมากไปน้อย
Linux · ข้อความ
คำสั่ง uniq ของ Linux
วิธีใช้ uniq เพื่อเหลือบรรทัดที่ซ้ำไว้เพียงบรรทัดเดียว และนับจำนวนครั้งที่ซ้ำด้วย -c
Linux · ข้อความ
คำสั่ง head และคำสั่ง tail ของ Linux
ตัวเลือกและวิธีใช้ head ที่แสดง 10 บรรทัดแรกของไฟล์ และ tail ที่แสดง 10 บรรทัดสุดท้าย
ℹ️ ประกาศเรื่องลิงก์แอฟฟิลิเอต
เนื้อหาของเว็บไซต์นี้มีลิงก์แอฟฟิลิเอต หากผู้เข้าชมซื้อสินค้าหรือบริการผ่านลิงก์เหล่านี้ เว็บไซต์นี้จะได้รับค่าคอมมิชชันจากผู้ขาย ในกระบวนการนี้ ราคาที่ผู้ซื้อจ่าย(ราคาจะลดลงเมื่อมีโปรโมชัน↓)จะไม่สูงขึ้นแต่อย่างใด ราคา ส่วนลด และข้อมูลสต็อกที่แสดงเป็นข้อมูล ณ เวลาที่เขียนและอาจต่างจากความเป็นจริง โปรดตรวจสอบกับผู้ขายอีกครั้งก่อนซื้อ การเลือกและการประเมินสินค้าเขียนตามเกณฑ์ของเราเอง และการได้รับค่าคอมมิชชันหรือไม่ไม่มีผลต่อลำดับการแนะนำหรือเนื้อหาการประเมิน