ความสนุกใน Linux Terminal - เล่นกับจำนวนคำและตัวอักษร
บรรทัดคำสั่งของ Linux มีความสนุกสนานมากมายในตัวมันเอง และงานที่น่าเบื่อหลายอย่างสามารถดำเนินการได้อย่างง่ายดายแต่ก็สมบูรณ์แบบ การเล่นกับคำและตัวอักษร ความถี่ในไฟล์ข้อความ ฯลฯ คือสิ่งที่เราจะได้เห็นในบทความนี้
คำสั่งเดียวที่อยู่ในใจของเราสำหรับการปรับแต่งบรรทัดคำสั่ง Linux เพื่อจัดการคำและอักขระจากไฟล์ข้อความคือคำสั่ง wc
คำสั่ง 'wc' ซึ่งย่อมาจากจำนวนคำสามารถพิมพ์บรรทัดใหม่ จำนวนคำ และไบต์จากไฟล์ข้อความได้
หากต้องการทำงานกับสคริปต์ขนาดเล็กเพื่อวิเคราะห์ไฟล์ข้อความ เราต้องมีไฟล์ข้อความ เพื่อรักษาความสม่ำเสมอ เรากำลังสร้างไฟล์ข้อความที่มีเอาต์พุตของคำสั่ง man ตามที่อธิบายไว้ด้านล่าง
man man > man.txt
คำสั่งดังกล่าวจะสร้างไฟล์ข้อความ 'man.txt' พร้อมด้วยเนื้อหาของ 'หน้าคู่มือ' สำหรับคำสั่ง 'man'
เราต้องการตรวจสอบคำที่พบบ่อยที่สุดใน 'ไฟล์ข้อความ' ที่สร้างขึ้นข้างต้นโดยการเรียกใช้สคริปต์ด้านล่าง
cat man.txt | tr ' ' '2' | tr '[:upper:]' '[:lower:]' | tr -d '[:punct:]' | grep -v '[^a-z]' | sort | uniq -c | sort -rn | head
ผลลัพธ์ตัวอย่าง
7557
262 the
163 to
112 is
112 a
78 of
78 manual
76 and
64 if
63 be
สคริปต์ธรรมดาซับหนึ่งด้านบนจะแสดงคำสิบคำที่ปรากฏบ่อยที่สุดและความถี่ของการปรากฏในไฟล์ข้อความ
ลองแยกคำออกเป็นรายบุคคลโดยใช้คำสั่งต่อไปนี้
echo 'tecmint team' | fold -w1
ผลลัพธ์ตัวอย่าง
t
e
c
m
i
n
t
t
e
a
m
หมายเหตุ: ในที่นี้ '-w1' ใช้สำหรับความกว้าง
ตอนนี้เราจะแยกย่อยทุกคำในไฟล์ข้อความ จัดเรียงผลลัพธ์และรับผลลัพธ์ที่ต้องการด้วยความถี่ของอักขระที่ใช้บ่อยที่สุดสิบตัว
fold -w1 < man.txt | sort | uniq -c | sort -rn | head
ผลลัพธ์ตัวอย่าง
8579
2413 e
1987 a
1875 t
1644 i
1553 n
1522 o
1514 s
1224 r
1021 l
ลองรับอักขระที่พบบ่อยที่สุดในไฟล์ข้อความด้วยตัวพิมพ์ใหญ่และตัวพิมพ์เล็กที่แตกต่างกันตามความถี่ที่ปรากฏ
fold -w1 < man.txt | sort | tr '[:lower:]' '[:upper:]' | uniq -c | sort -rn | head -20
ผลลัพธ์ตัวอย่าง
11636
2504 E
2079 A
2005 T
1729 I
1645 N
1632 S
1580 o
1269 R
1055 L
836 H
791 P
766 D
753 C
725 M
690 U
605 F
504 G
352 Y
344 .
ตรวจสอบผลลัพธ์ข้างต้น ซึ่งมีเครื่องหมายวรรคตอนรวมอยู่ด้วย ให้ตัดเครื่องหมายวรรคตอนออกด้วยคำสั่ง 'tr' ไปเลย:
fold -w1 < man.txt | tr '[:lower:]' '[:upper:]' | sort | tr -d '[:punct:]' | uniq -c | sort -rn | head -20
ผลลัพธ์ตัวอย่าง
11636
2504 E
2079 A
2005 T
1729 I
1645 N
1632 S
1580 O
1550
1269 R
1055 L
836 H
791 P
766 D
753 C
725 M
690 U
605 F
504 G
352 Y
ตอนนี้ฉันมีไฟล์ข้อความสามไฟล์ ให้เรียกใช้สคริปต์ไลเนอร์ด้านบนเพื่อดูผลลัพธ์
cat *.txt | fold -w1 | tr '[:lower:]' '[:upper:]' | sort | tr -d '[:punct:]' | uniq -c | sort -rn | head -8
ผลลัพธ์ตัวอย่าง
11636
2504 E
2079 A
2005 T
1729 I
1645 N
1632 S
1580 O
ต่อไปเราจะสร้างตัวอักษรที่ไม่บ่อยนักซึ่งมีความยาวอย่างน้อยสิบตัวอักษร นี่คือสคริปต์ง่ายๆ
cat man.txt | tr '' '2' | tr '[:upper:]' '[:lower:]' | tr -d '[:punct:]' | tr -d '[0-9]' | sort | uniq -c | sort -n | grep -E '..................' | head
ผลลัพธ์ตัวอย่าง
1 ──────────────────────────────────────────
1 a all
1 abc any or all arguments within are optional
1 able see setlocale for precise details
1 ab options delimited by cannot be used together
1 achieved by using the less environment variable
1 a child process returned a nonzero exit status
1 act as if this option was supplied using the name as a filename
1 activate local mode format and display local manual files
1 acute accent
หมายเหตุ: ยิ่งมีจุดในสคริปต์ด้านบนมากขึ้นเรื่อยๆ จนกระทั่งได้ผลลัพธ์ทั้งหมด เราสามารถใช้ .{10} เพื่อรับการจับคู่อักขระสิบตัว
สคริปต์ง่ายๆ เหล่านี้ยังทำให้เรารู้จักคำและตัวอักษรที่ปรากฏบ่อยที่สุดในภาษาอังกฤษ
นั่นคือทั้งหมดที่สำหรับตอนนี้. ฉันจะกลับมาที่นี่อีกครั้งพร้อมกับหัวข้อที่น่าสนใจและแปลกใหม่ซึ่งพวกคุณทุกคนจะชอบอ่าน อย่าลืมให้ข้อเสนอแนะอันมีค่าของคุณในส่วนความคิดเห็นด้านล่าง
อ่านเพิ่มเติม: 20 คำสั่งตลกของ Linux