คำสั่ง wc: นับจำนวนบรรทัด จำนวนคำ และการใช้ wc -l กับไปป์

สภาพแวดล้อมทดสอบตระกูล RHELAlmaLinux 9.8บัญชี rootตรวจสอบเมื่อ 2026-10-29

คำสั่ง wc คือคำสั่ง Linux ที่นับและแสดงจำนวนบรรทัด จำนวนคำ และจำนวนไบต์ของไฟล์ เมื่อนับบรรทัดของไฟล์ตัวอย่างบันทึกการเข้าถึงของเว็บเซิร์ฟเวอร์ด้วย wc -l จะได้ 10 และถ้าใช้ grep กรองเฉพาะการตอบกลับ 404 แล้วส่งต่อให้ wc -l คุณจะเห็นจำนวนคำขอที่ล้มเหลวคือ 3 เป็นตัวเลขเดียว

บันทึก เนื้อหาไฟล์ และโฟลเดอร์ทำงาน /root/work ด้านล่างเป็นค่าตัวอย่าง บันทึกนี้เป็นไฟล์สิบบรรทัดที่สร้างจากที่อยู่ IP สำหรับเอกสาร และไฟล์อื่นๆ ก็สร้างขึ้นเพื่อการทดสอบทั้งหมด

1️⃣ การใช้งานพื้นฐานของคำสั่ง wc และการอ่านผลลัพธ์

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

cd /root/work
wc access.log
 10 100 766 access.log

ในผลการนับบันทึกการเข้าถึง 10 คือจำนวนบรรทัด 100 คือจำนวนคำ และ 766 คือจำนวนไบต์

ถ้าต้องการดูตัวเลขเดียว ให้เพิ่ม -l, -w หรือ -c อย่างใดอย่างหนึ่ง

wc -l access.log
10 access.log
wc -w access.log
100 access.log
wc -c access.log
766 access.log

ถ้าระบุไฟล์ที่ไม่มีอยู่ จะมีข้อความแสดงข้อผิดพลาดและรหัสสิ้นสุดเป็น 1

wc nosuch.txt
wc: nosuch.txt: No such file or directory
echo $?
1

2️⃣ การนับบรรทัดด้วย wc -l และไปป์

เมื่อนับบรรทัดแล้วมีชื่อไฟล์ติดออกมาด้วย ตอนเก็บตัวเลขไว้ในตัวแปรของสคริปต์ คุณต้องตัดชื่อไฟล์ออกอีกครั้ง ถ้าส่งไฟล์ผ่านการเปลี่ยนทิศทาง (<) หรือไปป์ wc จะไม่รู้ชื่อไฟล์ จึงแสดงเฉพาะตัวเลข

wc -l < access.log
10
cat access.log | wc -l
10

ถ้าวาง grep ไว้หน้าไปป์ คุณจะนับได้เฉพาะบรรทัดที่ตรงตามเงื่อนไข การค้นหารวมช่องว่างหน้าและหลังรหัสการตอบกลับ 404 ด้วย และมีบรรทัดที่มี 404 อยู่สามบรรทัด

grep ' 404 ' access.log | wc -l
3

เมื่อต้องการนับว่ามี IP ที่เชื่อมต่อเข้ามากี่ตัว ให้ตัดเฉพาะช่องแรก ลบบรรทัดที่ซ้ำด้วย sort -u แล้วจึงนับ ในบันทึกสิบบรรทัดนี้มี IP ที่ไม่ซ้ำกันสี่ตัว

cut -d ' ' -f 1 access.log | sort -u
192.0.2.10
192.0.2.44
198.51.100.7
203.0.113.25
cut -d ' ' -f 1 access.log | sort -u | wc -l
4

wc -l นับจำนวนอักขระขึ้นบรรทัดใหม่ ดังนั้นไฟล์ที่ท้ายบรรทัดสุดท้ายไม่มีอักขระขึ้นบรรทัดใหม่ แม้ cat จะแสดงสองบรรทัด wc -l ก็จะแสดง 1

cat no-newline.txt
first line
last line
wc -l no-newline.txt
1 no-newline.txt

ถ้าจำนวนบรรทัดออกมาน้อยไปหนึ่ง ให้ตรวจสอบก่อนว่าท้ายบรรทัดสุดท้ายมีอักขระขึ้นบรรทัดใหม่หรือไม่

3️⃣ ตัวเลือกของ wc และจำนวนอักขระด้วย -c, -m

ใน UTF-8 ตัวอักษรภาษาอังกฤษและตัวเลขใช้ 1 ไบต์ต่ออักขระ ส่วนอักษรเกาหลี (ฮันกึล) และ ☕ ใช้ตัวละ 3 ไบต์ ดังนั้นไฟล์ที่มีแต่ข้อความภาษาอังกฤษ จำนวนไบต์ที่นับด้วย -c กับจำนวนอักขระที่นับด้วย -m จะเท่ากัน แต่เมื่อมีภาษาเกาหลี ตัวเลขทั้งสองจะต่างกัน การเปรียบเทียบนี้ใช้ไฟล์ที่มีชื่อเมนูภาษาเกาหลีสองบรรทัดและภาษาอังกฤษหนึ่งบรรทัด

cat menu.txt
아메리카노
카페 라테 ☕
tea
wc -c menu.txt
38 menu.txt
wc -m menu.txt
18 menu.txt

-c ได้ 38 และ -m ได้ 18 ต่างกัน 20 ซึ่งเป็นส่วนที่อักษรเกาหลีเก้าตัวและ ☕ ใช้เพิ่มตัวละ 2 ไบต์ ดังนั้นไฟล์ที่มีภาษาเกาหลีต้องนับด้วย -m จึงจะตรงกับจำนวนอักขระจริง การวัดทำในโลแคล C.UTF-8 และตามคู่มือ -m นับตามหน่วยอักขระของโลแคล

-L แสดงความกว้างในการแสดงผลของบรรทัดที่ยาวที่สุด ในบันทึกการเข้าถึง บรรทัดที่ยาวที่สุดกว้าง 82 คอลัมน์ ส่วนไฟล์เมนู อักษรเกาหลีและ ☕ ใช้ตัวละสองคอลัมน์ บรรทัดที่มี 7 อักขระจึงได้ 12

wc -L access.log
82 access.log
wc -L menu.txt
12 menu.txt

อักษรละตินที่มีเครื่องหมายเน้นเสียงใช้ 2 ไบต์ต่ออักขระใน UTF-8 ซึ่งวัดแยกด้วยไฟล์ที่มีเพียงบรรทัดเดียวคือ café

cat cafe.txt
café
wc -c cafe.txt
6 cafe.txt
wc -m cafe.txt
5 cafe.txt

-c ได้ 6 และ -m ได้ 5 เพราะ é ตัวเดียวใช้เพิ่ม 1 ไบต์ ตัวอักษรภาษาอังกฤษและตัวเลขใช้ 1 ไบต์ อักษรที่มีเครื่องหมายเน้นเสียงอย่าง é ใช้ 2 ไบต์ ส่วนอักษรเกาหลีและ ☕ ใช้ 3 ไบต์ แม้จำนวนอักขระเท่ากัน จำนวนไบต์จึงต่างกันได้

ตารางนี้รวบรวมคำสั่งที่เหมาะกับงานแต่ละอย่าง พร้อมตัวเลขที่นับได้ในบทความนี้

งานที่ต้องการทำคำสั่งผลวัดในบทความนี้
รับเฉพาะจำนวนบรรทัดเป็นตัวเลขwc -l < access.log10ตัวเลขอย่างเดียว ไม่มีชื่อไฟล์
นับบรรทัดที่ตรงตามเงื่อนไขgrep ‘ 404 ‘ access.log | wc -l3บรรทัดที่ตอบกลับ 404
นับค่าที่ไม่ซ้ำกันcut -d ‘ ‘ -f 1 access.log | sort -u | wc -l4จำนวน IP ที่ไม่ซ้ำกัน
ตรวจสอบขนาดไฟล์wc -c access.log766จำนวนไบต์
จำนวนอักขระของไฟล์ที่มีภาษาเกาหลีwc -m menu.txt18ถ้านับไฟล์เดียวกันด้วย -c ได้ 38
ความกว้างในการแสดงผลของบรรทัดที่ยาวที่สุดwc -L access.log82ไฟล์เมนูนับอักษรเกาหลีหนึ่งตัวเป็นสองคอลัมน์ จึงได้ 12
ผลรวมจำนวนบรรทัดของหลายไฟล์wc -l *.log13ผลรวมอยู่ในบรรทัด 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 แล้วนับใหม่ จะเห็นตัวเลขที่เพิ่มขึ้น

ตัวจำลองคำสั่ง wcwc / บัญชี root
[root@server work]#
ใช้ปุ่ม ↑↓ บนแป้นพิมพ์เพื่อเรียกคำสั่งที่พิมพ์ไว้ก่อนหน้ากลับมา

🔢 FAQ & เนื้อหาแนะนำ

เหมือนกันเมื่อนับบรรทัดที่ตรงตามเงื่อนไขในไฟล์เดียว ในบันทึกการเข้าถึงเดียวกัน grep -c ที่ใช้เงื่อนไขเดียวกันก็ได้ 3 grep -c จบได้ด้วยคำสั่งเดียวโดยไม่ต้องใช้ไปป์ ส่วน wc -l ใช้นับผลลัพธ์ของคำสั่งอื่นนอกจาก grep เช่น sort หรือ cut

wc -w นับแต่ละก้อนที่คั่นด้วยช่องว่าง แท็บ หรือการขึ้นบรรทัดใหม่เป็นหนึ่งคำ ผลของ [echo ‘log_level=warn timeout = 30’ | wc -w] คือ 4 โดย log_level=warn ที่เขียนติดกันไม่มีช่องว่างนับเป็นหนึ่งคำ และ = ที่มีช่องว่างทั้งสองข้างนับเป็นอีกหนึ่งคำ

ใช้ find เลือกเฉพาะไฟล์แล้วส่งต่อให้ wc -l ในโฟลเดอร์ตัวอย่าง [find /root/work -type f | wc -l] แสดง 5 ส่วน [ls | wc -l] ในโฟลเดอร์เดียวกันก็ได้ 5 เช่นกัน แต่ ls จะแสดงชื่อโฟลเดอร์ย่อยเป็นบรรทัดด้วย และไม่นับไฟล์ที่อยู่ข้างใน

🪐อ้างอิงแหล่งทางการ 2

ℹ️ ประกาศเรื่องลิงก์แอฟฟิลิเอต
เนื้อหาของเว็บไซต์นี้มีลิงก์แอฟฟิลิเอต หากผู้เข้าชมซื้อสินค้าหรือบริการผ่านลิงก์เหล่านี้ เว็บไซต์นี้จะได้รับค่าคอมมิชชันจากผู้ขาย ในกระบวนการนี้ ราคาที่ผู้ซื้อจ่าย(ราคาจะลดลงเมื่อมีโปรโมชัน↓)จะไม่สูงขึ้นแต่อย่างใด ราคา ส่วนลด และข้อมูลสต็อกที่แสดงเป็นข้อมูล ณ เวลาที่เขียนและอาจต่างจากความเป็นจริง โปรดตรวจสอบกับผู้ขายอีกครั้งก่อนซื้อ การเลือกและการประเมินสินค้าเขียนตามเกณฑ์ของเราเอง และการได้รับค่าคอมมิชชันหรือไม่ไม่มีผลต่อลำดับการแนะนำหรือเนื้อหาการประเมิน

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *

Prove your humanity: 2   +   3   =