คำสั่ง awk: การแสดงฟิลด์ ตัวคั่น -F และการใช้รูปแบบเงื่อนไข
คำสั่ง awk เป็นเครื่องมือ Linux ที่อ่านไฟล์ข้อความทีละบรรทัด แบ่งแต่ละบรรทัดเป็นฟิลด์ตามช่องว่างหรือตัวคั่นที่คุณกำหนด แล้วเลือกเฉพาะฟิลด์ของบรรทัดที่ตรงตามเงื่อนไขมาแสดงหรือคำนวณ บนเซิร์ฟเวอร์ AlmaLinux 9 เราได้นับจำนวนคำขอตาม IP และจำนวนตามรหัสสถานะจากไฟล์ตัวอย่างบันทึกการเข้าถึงของเว็บเซิร์ฟเวอร์ด้วยคำสั่งบรรทัดเดียวที่ต่อกับ sort ผ่านไปป์ พบว่าการตอบกลับ 404 ทั้งสามรายการจากสิบสองบรรทัดเป็นคำขอ wp-login.php และ .env จาก IP เดียวกัน
เอาต์พุตด้านล่างได้จากการรันด้วยบัญชี root ภายในโฟลเดอร์ทำงานบนเซิร์ฟเวอร์ AlmaLinux 9.8 บันทึกการเข้าถึง รายการบัญชี บันทึกการขาย และไฟล์คะแนนเป็นไฟล์ตัวอย่างที่สร้างขึ้นเพื่อการทดสอบ ที่อยู่ IP และชื่อบัญชีในไฟล์ก็เป็นค่าตัวอย่างเช่นกัน
1️⃣ วิธีใช้คำสั่ง awk เบื้องต้น
awk แบ่งบรรทัดที่อ่านตามช่องว่าง แล้วให้หมายเลขฟิลด์จากด้านหน้าเป็น $1, $2, $3 เราตรวจสอบด้วย scores.txt ที่ชื่อ ผลลัพธ์ และคะแนนคั่นด้วยช่องว่าง
cat scores.txtalice pass 82
bob fail 47
carol pass 91
dave pass 68
erin fail 55วงเล็บปีกกาในเครื่องหมายคำพูดเดี่ยวคือการทำงาน (แอ็กชัน) ที่รันกับทุกบรรทัด และเมื่อเรียงหมายเลขฟิลด์หลัง print โดยคั่นด้วยจุลภาค จะแสดงเฉพาะฟิลด์นั้น เมื่อแสดงฟิลด์ที่หนึ่งและสาม จะเหลือเพียงชื่อและคะแนน
awk '{print $1, $3}' scores.txtalice 82
bob 47
carol 91
dave 68
erin 55ถ้าเอาจุลภาคระหว่างฟิลด์ออกแล้วเขียน $1 $3 ค่าทั้งสองจะติดกันโดยไม่มีช่องว่าง จุลภาคของ print คือเครื่องหมายที่ใส่ตัวคั่นเอาต์พุต (ค่าเริ่มต้นคือช่องว่างหนึ่งตัว) ส่วนค่าที่เขียนเรียงกันโดยไม่มีจุลภาคจะต่อกันเป็นสตริงเดียว
awk '{print $1 $3}' scores.txtalice82
bob47
carol91
dave68
erin55NR คือหมายเลขบรรทัดที่อ่านมาถึงตอนนี้ NF คือจำนวนฟิลด์ของบรรทัดนั้น $NF หมายถึงฟิลด์สุดท้าย จึงเลือกคอลัมน์สุดท้ายได้แม้จำนวนฟิลด์ในแต่ละบรรทัดจะต่างกัน
awk '{print NR, NF, $NF}' scores.txt1 3 82
2 3 47
3 3 91
4 3 68
5 3 55บันทึกการเข้าถึงของเว็บเซิร์ฟเวอร์ก็คั่นด้วยช่องว่าง จึงเลือกฟิลด์ได้ด้วยวิธีเดียวกัน หมายเลขฟิลด์ของบรรทัดแรกในบันทึกทดสอบเป็นดังนี้
| ฟิลด์ | ค่าในบรรทัดแรก | ความหมาย |
|---|---|---|
| $1 | 192.0.2.10 | IP ของไคลเอนต์ |
| $4 | [29/Oct/2026:00:01:12 | วันที่และเวลาของคำขอ |
| $6 | "GET | เมธอดของคำขอ (มีเครื่องหมายคำพูดคู่นำหน้า) |
| $7 | /index.html | URL ของคำขอ |
| $9 | 200 | รหัสสถานะ |
| $10 | 5120 | ไบต์ที่ส่ง |
| $11 | "-" | หน้าก่อนหน้า (Referer) |
| $12~$15 | "Mozilla/5.0 (X11; Linux x86_64)" | User agent (แยกทุกช่องว่าง) |
เราเลือกแสดง $1, $7 และ $9 ซึ่งตรงกับ IP ของไคลเอนต์ URL ของคำขอ และรหัสสถานะ
awk '{print $1, $7, $9}' access.log192.0.2.10 /index.html 200
198.51.100.7 /about.html 200
192.0.2.10 /images/logo.png 200
203.0.113.25 /wp-login.php 404
203.0.113.25 /wp-login.php 404
192.0.2.10 /contact.html 200
198.51.100.7 /old-page.html 301
203.0.113.25 /.env 404
192.0.2.44 /index.html 200
198.51.100.7 /api/search?q=awk 500
192.0.2.44 /images/logo.png 304
192.0.2.10 /index.html 200คอลัมน์ที่ค่ามีช่องว่างอย่าง user agent จะแยกเป็นหลายฟิลด์ NF ของสามบรรทัดแรกเป็น 15 ทั้งหมด และ $NF คือส่วนสุดท้ายของ user agent
awk '{print NF, $NF}' access.log | head -315 x86_64)"
15 x86_64)"
15 x86_64)"2️⃣ กำหนดตัวคั่นด้วย awk -F
ไฟล์ที่คอลัมน์คั่นด้วยสัญลักษณ์อื่นที่ไม่ใช่ช่องว่าง ให้เขียนสัญลักษณ์นั้นหลัง -F เมื่อแสดง $1 โดยไม่ใช้ -F จากรายการบัญชี users.txt ที่สร้างในรูปแบบเดียวกับ /etc/passwd บรรทัดส่วนใหญ่แสดงออกมาทั้งบรรทัด
awk '{print $1}' users.txtroot:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
nobody:x:65534:65534:Kernel
user:x:1000:1000:Example
deploy:x:1001:1001:Deploy
backup:x:1002:1002::/home/backup:/sbin/nologinตัวคั่นเริ่มต้นคือช่องว่าง บรรทัดที่เชื่อมด้วยทวิภาคอย่างเดียวจึงมีฟิลด์เดียว มีเพียงบรรทัด nobody, user และ deploy ที่มีช่องว่างในคอลัมน์คำอธิบายเท่านั้นที่ถูกตัดตรงช่องว่างนั้น
เมื่อกำหนดทวิภาคเป็นตัวคั่นด้วย -F: ชื่อบัญชี ($1) และเชลล์สำหรับล็อกอิน ($7) จะแยกจากกัน
awk -F: '{print $1, $7}' users.txtroot /bin/bash
bin /sbin/nologin
daemon /sbin/nologin
nobody /sbin/nologin
user /bin/bash
deploy /bin/bash
backup /sbin/nologinไฟล์ CSV ที่คั่นด้วยจุลภาคแบ่งด้วย -F, เมื่อแสดงสินค้าและจำนวนจากบันทึกการขาย sales.csv หัวตารางในบรรทัดแรก (item qty) ก็ถูกแบ่งแบบเดียวกันและแสดงออกมาด้วย
awk -F, '{print $2, $3}' sales.csvitem qty
keyboard 2
mouse 5
monitor 1
keyboard 1
cable 10
mouse 2
monitor 2-F, ไม่เหมาะกับ CSV ที่มีจุลภาคอยู่ในคอลัมน์ที่ครอบด้วยเครื่องหมายคำพูดคู่ ใน quoted.csv ที่มีจุลภาคในคอลัมน์สินค้า ฟิลด์จะถูกแบ่งตรงจุลภาคในเครื่องหมายคำพูดด้วย ทำให้ฟิลด์ที่สองเหลือเพียงส่วนต้นของชื่อสินค้า
awk -F, '{print $2}' quoted.csvitem
"cable
keyboardคู่มือทางการของ GNU Awk แนะนำวิธีใช้ตัวแปร FPAT กับไฟล์แบบนี้ เมื่อเขียนรูปร่างของหนึ่งฟิลด์เป็นนิพจน์ทั่วไปแทนตัวคั่น คอลัมน์ที่ครอบด้วยเครื่องหมายคำพูดจะออกมาเป็นฟิลด์เดียว
awk -v FPAT='([^,]*)|("[^"]*")' '{print $2}' quoted.csvitem
"cable, usb"
keyboardถ้าต้องการใช้ตัวคั่นหลายตัว ให้เขียนเป็นนิพจน์ทั่วไปในวงเล็บเหลี่ยม เมื่อกำหนดทั้งทวิภาคและเครื่องหมายทับเป็นตัวคั่น $NF จะเป็นชื่อสุดท้ายของพาธเชลล์สำหรับล็อกอิน (bash, nologin)
awk -F'[:/]' '{print $1, $NF}' users.txtroot bash
bin nologin
daemon nologin
nobody nologin
user bash
deploy bash
backup nologin3️⃣ รูปแบบเงื่อนไขของคำสั่ง awk
แม้จะเลือกฟิลด์แล้ว ทุกบรรทัดก็ยังถูกแสดง ถ้าต้องการเหลือเฉพาะบรรทัดที่ต้องการ ให้วางเงื่อนไข (รูปแบบ) ไว้หน้าวงเล็บปีกกา สตริงระหว่างเครื่องหมายทับจะเลือกเฉพาะบรรทัดที่มีสตริงนั้น และถ้าละแอ็กชันจะแสดงทั้งบรรทัด
awk '/wp-login/' access.log203.0.113.25 - - [29/Oct/2026:00:04:51 +0000] "POST /wp-login.php HTTP/1.1" 404 196 "-" "Mozilla/5.0 (X11; Linux x86_64)"
203.0.113.25 - - [29/Oct/2026:00:04:52 +0000] "POST /wp-login.php HTTP/1.1" 404 196 "-" "Mozilla/5.0 (X11; Linux x86_64)"ผลการเลือกบรรทัดเหมือนกับ คำสั่ง grepและ awk ยังเลือกฟิลด์จากบรรทัดที่เลือกแล้วแสดงได้ทันที เมื่อส่งสองบรรทัดเดียวกันที่เลือกด้วย grep ไปยัง awk ผ่านไปป์ จะเหลือเพียง IP และรหัสสถานะ
grep wp-login access.log | awk '{print $1, $9}'203.0.113.25 404
203.0.113.25 404ค่าฟิลด์เปรียบเทียบด้วย ==, !=, >, >=, <, <= เราเลือกเฉพาะบรรทัดที่รหัสสถานะ ($9) เป็น 404 แล้วแสดง IP และ URL ของคำขอ
awk '$9 == 404 {print $1, $7}' access.log203.0.113.25 /wp-login.php
203.0.113.25 /wp-login.php
203.0.113.25 /.envเมื่อเปรียบเทียบกับสตริง ให้ครอบค่าด้วยเครื่องหมายคำพูดคู่ เราเลือกเฉพาะชื่อที่ฟิลด์ที่สองเป็น pass
awk '$2 == "pass" {print $1}' scores.txtalice
carol
daveการเปรียบเทียบตัวเลขใช้เลือกตามช่วง เช่น หมายเลขบัญชี (UID) เมื่อเลือกบัญชีที่ UID ตั้งแต่ 1000 ขึ้นไป จะได้บัญชีทั่วไปพร้อมกับ nobody ที่ UID เป็น 65534
awk -F: '$3 >= 1000 {print $1, $3}' users.txtnobody 65534
user 1000
deploy 1001
backup 1002เงื่อนไขสองข้อเชื่อมด้วย && เมื่อเพิ่มเงื่อนไขน้อยกว่า 65534 nobody จะหายไป เหลือเพียงบัญชีทั่วไปสามบัญชีและโฟลเดอร์โฮม
awk -F: '$3 >= 1000 && $3 < 65534 {print $1, $6}' users.txtuser /home/user
deploy /home/deploy
backup /home/backup[~] ตรวจว่าฟิลด์ตรงกับนิพจน์ทั่วไปหรือไม่ ส่วน [!~] ตรวจว่าไม่ตรง เมื่อเลือกบัญชีที่เชลล์สำหรับล็อกอิน ($7) ลงท้ายด้วย bash และบัญชีที่ไม่ใช่ nologin ตามลำดับ จะได้สามบัญชีเดียวกัน
awk -F: '$7 ~ /bash$/ {print $1}' users.txtroot
user
deployawk -F: '$7 !~ /nologin/ {print $1, $7}' users.txtroot /bin/bash
user /bin/bash
deploy /bin/bashเงื่อนไข NR เลือกตามหมายเลขบรรทัด เมื่อตัดบรรทัดหัวตารางของ CSV ด้วย NR > 1 จะเหลือเฉพาะบันทึกการขาย
awk -F, 'NR > 1 {print $2, $3}' sales.csvkeyboard 2
mouse 5
monitor 1
keyboard 1
cable 10
mouse 2
monitor 2เอาต์พุตของคำสั่งอื่นก็ส่งผ่านไปป์แล้วแบ่งแบบเดียวกันได้ เมื่อเลือกขนาดไฟล์ ($5) และชื่อ ($9) จากเอาต์พุตของ ls -l บรรทัดแรกออกมาว่าง เพราะบรรทัดแรกของ ls -l คือ [total 24] ไม่มีฟิลด์ที่ห้าและเก้า
ls -l | awk '{print $5, $9}'
1567 access.log
79 quoted.csv
207 sales.csv
85 scores-copy.txt
85 scores.txt
315 users.txtเมื่อใส่ NR > 1 บรรทัดแรกจะหายไป เหลือเฉพาะขนาดและชื่อไฟล์
ls -l | awk 'NR > 1 {print $5, $9}'1567 access.log
79 quoted.csv
207 sales.csv
85 scores-copy.txt
85 scores.txt
315 users.txt4️⃣ awk BEGIN END ผลรวมและค่าเฉลี่ย
บล็อก BEGIN ทำงานหนึ่งครั้งก่อนอ่านบรรทัดแรก ส่วนบล็อก END ทำงานหนึ่งครั้งหลังประมวลผลบรรทัดสุดท้าย ผลรวมทำได้โดยบวกเข้าตัวแปรทุกบรรทัดแล้วแสดงใน END แผนภาพด้านล่างแสดงลำดับที่ awk ทำในแต่ละบรรทัดเมื่อหาผลรวมของยอดเงินในบันทึกการขาย
$ awk -F, 'NR > 1 {t += $3 * $4} END {printf "total %.2f\n", t}' sales.csvผลรวมของไบต์ที่ส่ง ($10) ทั้งหมดในบันทึกการเข้าถึงคือ 41298 ไบต์ ตัวแปรที่ใช้ครั้งแรกเริ่มจากค่าว่าง (เป็นตัวเลขคือ 0) จึงไม่ต้องใส่ 0 เอง
awk '{sum += $10} END {print sum}' access.log41298ถ้าแสดงผลรวมในแอ็กชันที่รันทุกบรรทัดแทน END จะเห็นยอดสะสมทุกครั้งที่อ่านบรรทัด เมื่อแสดงหมายเลขบรรทัดและ t ทุกครั้งที่บวกผลคูณของจำนวนกับราคาเข้า t จะได้เจ็ดบรรทัดโดยไม่รวมหัวตาราง และ 886.3 ในบรรทัดสุดท้ายคือผลรวมทั้งหมด
awk -F, 'NR > 1 {t += $3 * $4; print NR, t}' sales.csv2 90
3 189.5
4 378.5
5 423.5
6 468.5
7 508.3
8 886.3ค่าเฉลี่ยหาได้ใน END โดยนำผลรวมหารด้วยจำนวนบรรทัด คะแนนห้าค่ารวมกันได้ 343 และค่าเฉลี่ยคือ 68.6
awk '{total += $3; n++} END {print total, n, total / n}' scores.txt343 5 68.6BEGIN ใช้แสดงบรรทัดหัวตารางหนึ่งครั้งเหนือผลลัพธ์ เหนือสินค้าและยอดเงิน (จำนวน × ราคาต่อหน่วย) จะมีบรรทัด item total เพียงครั้งเดียว
awk -F, 'BEGIN {print "item", "total"} NR > 1 {print $2, $3 * $4}' sales.csvitem total
keyboard 90
mouse 99.5
monitor 189
keyboard 45
cable 45
mouse 39.8
monitor 378ตัวคั่นเอาต์พุตเปลี่ยนได้ด้วยตัวแปร OFS ใน BEGIN เมื่อตั้ง OFS เป็นจุลภาค ตำแหน่งจุลภาคของ print จะเป็นจุลภาคแทนช่องว่าง และรายการบัญชีจะออกมาในรูปแบบ CSV
awk 'BEGIN {FS = ":"; OFS = ","} {print $1, $3, $7}' users.txtroot,0,/bin/bash
bin,1,/sbin/nologin
daemon,2,/sbin/nologin
nobody,65534,/sbin/nologin
user,1000,/bin/bash
deploy,1001,/bin/bash
backup,1002,/sbin/nologinถ้าต้องการจัดแนวคอลัมน์ให้ใช้ printf %-10s คือสตริงชิดซ้าย 10 ช่อง %3d คือจำนวนเต็ม 3 ช่อง และ %8.2f คือตัวเลข 8 ช่องที่มีทศนิยมสองตำแหน่ง
awk -F, 'NR > 1 {printf "%-10s %8.2f\n", $2, $3, $3 * $4}' sales.csvkeyboard 2 90.00
mouse 5 99.50
monitor 1 189.00
keyboard 1 45.00
cable 10 45.00
mouse 2 39.80
monitor 2 378.00printf ต่างจาก print ตรงที่ไม่ขึ้นบรรทัดใหม่ จึงต้องเขียน [\n] ท้ายรูปแบบ ถ้ารันโดยไม่มี [\n] ชื่อสินค้าจะต่อกันเป็นบรรทัดเดียว
awk -F, 'NR > 1 {printf "%s ", $2}' sales.csvkeyboard mouse monitor keyboard cable mouse monitor5️⃣ การวิเคราะห์บันทึกและตัวเลือกของคำสั่ง awk
🔲 การวิเคราะห์บันทึก
การบวกเข้าตัวแปรเดียวได้ผลรวมเดียว ถ้าต้องการนับแยกตาม IP หรือรหัสสถานะ ให้รวบรวมค่าในอาร์เรย์ n[$1]++ บวก 1 เข้าช่องอาร์เรย์ที่ใช้ IP เป็นคีย์ และ for (ip in n) ใน END จะดึงช่องที่รวบรวมไว้ออกมาทีละช่อง
awk '{n[$1]++} END {for (ip in n) print n[ip], ip}' access.log | sort -rn4 192.0.2.10
3 203.0.113.25
3 198.51.100.7
2 192.0.2.44ลำดับที่ for (ip in n) ดึงออกมาไม่แน่นอน (ตามคู่มือ GNU Awk) เราจึงเรียงตามจำนวนคำขอด้วย sort -rn โดย 192.0.2.10 มากที่สุดที่ 4 รายการ
จำนวนตามรหัสสถานะนับด้วยวิธีเดียวกัน มี 404 จำนวน 3 รายการ และ 500 จำนวน 1 รายการ
awk '{n[$9]++} END {for (s in n) print s, n[s]}' access.log | sort200 6
301 1
304 1
404 3
500 1ถ้าดึงเฉพาะรหัสสถานะแล้วส่งให้ sort และ uniq -c ก็ได้จำนวนเท่ากัน
awk '{print $9}' access.log | sort | uniq -c 6 200
1 301
1 304
3 404
1 500ถ้าต้องการดูเฉพาะการตอบกลับที่ผิดพลาด ให้ตั้งเงื่อนไขที่รหัสสถานะ บรรทัดที่ตั้งแต่ 400 ขึ้นไปคือคำขอค้นหา wp-login.php และ .env สามรายการ และข้อผิดพลาด 500 หนึ่งรายการ
awk '$9 >= 400 {print $9, $1, $7}' access.log404 203.0.113.25 /wp-login.php
404 203.0.113.25 /wp-login.php
404 203.0.113.25 /.env
500 198.51.100.7 /api/search?q=awkผลรวมไบต์ที่ส่งตาม IP ก็หาได้โดยบวกเข้าอาร์เรย์ 192.0.2.10 ได้รับมากที่สุดที่ 31340 ไบต์
awk '{b[$1] += $10} END {for (ip in b) print b[ip], ip}' access.log | sort -rn31340 192.0.2.10
5120 192.0.2.44
4250 198.51.100.7
588 203.0.113.25ฟิลด์เวลา ($4) เปรียบเทียบเป็นสตริงได้ ในบรรทัดที่วันที่และรูปแบบเหมือนกัน ลำดับสตริงตรงกับลำดับเวลา เราจึงเลือกเฉพาะคำขอสี่รายการตั้งแต่ 00:05 จนถึงก่อน 00:10
awk '$4 >= "[29/Oct/2026:00:05" && $4 < "[29/Oct/2026:00:10" {print $4, $7}' access.log[29/Oct/2026:00:05:30 /contact.html
[29/Oct/2026:00:07:02 /old-page.html
[29/Oct/2026:00:07:15 /.env
[29/Oct/2026:00:09:48 /index.html🔲 ตัวเลือกของคำสั่ง awk
📌 ตัวเลือกหลัก: ผลที่รันในบทความนี้
| ตัวเลือก | หน้าที่ | ผลที่เห็นในบทความนี้ |
|---|---|---|
| -F fs | กำหนดตัวคั่นฟิลด์อินพุต | -F: แยกชื่อบัญชี ($1) และเชลล์สำหรับล็อกอิน ($7) ของ users.txt ส่วน -F, แสดงสินค้าและจำนวนของ sales.csv พร้อมหัวตาราง (item qty) |
| -v var=val | กำหนดค่าให้ตัวแปรก่อนรันโปรแกรม | ส่งตัวแปรเชลล์ min ด้วย -v min=$min จะแสดงหกบรรทัดที่ไบต์ที่ส่งตั้งแต่ 1000 ขึ้นไป ส่วน -v FPAT=… ทำให้คอลัมน์ที่ครอบด้วยเครื่องหมายคำพูดใน quoted.csv เป็นฟิลด์เดียว |
| -i inplace | บันทึกเอาต์พุตลงไฟล์เดิมแทนการแสดงบนหน้าจอ | หลังรัน gawk -i inplace ไม่มีอะไรแสดงบนหน้าจอ และสำเนา scores.txt เปลี่ยนเป็นสองคอลัมน์คือชื่อและคะแนน ถ้าใส่ -v inplace::suffix=.bak ด้วย เนื้อหาก่อนเปลี่ยนจะเหลือในไฟล์ .bak |
| --version | แสดงข้อมูลเวอร์ชัน | บรรทัดแรกของ [awk --version] แสดงเวอร์ชัน GNU Awk 5 |
📎 ตัวเลือกอื่น: ตามคู่มือทางการ
| ตัวเลือก | หน้าที่ |
|---|---|
| -f program-file | อ่านโปรแกรม AWK จากไฟล์แทนอาร์กิวเมนต์แรกของบรรทัดคำสั่ง ระบุ -f ได้หลายครั้ง |
| -e program-text | ใช้ข้อความในบรรทัดคำสั่งเป็นซอร์สโปรแกรม AWK ใช้ร่วมกับฟังก์ชันไลบรารีที่โหลดด้วย -f หรือ --include ได้ |
| -E file | คล้าย -f แต่ถูกประมวลผลท้ายสุดและป้องกันการกำหนดตัวแปรทางบรรทัดคำสั่ง สำหรับสคริปต์ #! |
| --traditional | รันในโหมดเข้ากันได้ ไม่รู้จักส่วนขยายของ GNU |
| --posix | เปิดโหมดเข้ากันได้และเพิ่มข้อจำกัด เช่น ไม่รู้จัก func ซึ่งเป็นคำพ้องของ function |
| --lint | เตือนโครงสร้างที่น่าสงสัยหรือย้ายไปใช้กับ AWK อื่นได้ยาก ถ้าใช้ --lint=fatal คำเตือนจะกลายเป็นข้อผิดพลาดร้ายแรง |
| --dump-variables | เขียนรายการตัวแปรส่วนกลางพร้อมชนิดและค่าสุดท้ายแบบเรียงลำดับลงไฟล์ ถ้าไม่ระบุไฟล์จะเป็น awkvars.out |
🔲 ตัวจำลองคำสั่ง awk
ในตัวจำลองด้านล่าง คุณสามารถพิมพ์คำสั่ง awk กับไฟล์ทดสอบชุดเดียวกันได้เอง
🔢 FAQ & เนื้อหาแนะนำ
การเรียงลำดับ
คำสั่ง sort ของ Linux: การเรียงไฟล์
คำสั่ง sort เรียงเนื้อหาไฟล์ตามตัวอักษรหรือค่าตัวเลข ใช้ต่อเมื่อต้องการดูผลรวมจาก awk จากมากไปน้อย
การลบรายการซ้ำ
คำสั่ง uniq ของ Linux
คำสั่ง uniq ยุบบรรทัดเหมือนกันที่อยู่ติดกันให้เหลือบรรทัดเดียว และนับจำนวนครั้งที่ซ้ำด้วย -c
การดูไฟล์
คำสั่ง head และคำสั่ง tail ของ Linux
คำสั่ง head และ tail แสดงเฉพาะบรรทัดแรก ๆ หรือท้าย ๆ ของไฟล์ มักใช้ตรวจบันทึกการเข้าถึงของเซิร์ฟเวอร์
ℹ️ ประกาศเรื่องลิงก์แอฟฟิลิเอต
เนื้อหาของเว็บไซต์นี้มีลิงก์แอฟฟิลิเอต หากผู้เข้าชมซื้อสินค้าหรือบริการผ่านลิงก์เหล่านี้ เว็บไซต์นี้จะได้รับค่าคอมมิชชันจากผู้ขาย ในกระบวนการนี้ ราคาที่ผู้ซื้อจ่าย(ราคาจะลดลงเมื่อมีโปรโมชัน↓)จะไม่สูงขึ้นแต่อย่างใด ราคา ส่วนลด และข้อมูลสต็อกที่แสดงเป็นข้อมูล ณ เวลาที่เขียนและอาจต่างจากความเป็นจริง โปรดตรวจสอบกับผู้ขายอีกครั้งก่อนซื้อ การเลือกและการประเมินสินค้าเขียนตามเกณฑ์ของเราเอง และการได้รับค่าคอมมิชชันหรือไม่ไม่มีผลต่อลำดับการแนะนำหรือเนื้อหาการประเมิน