ค้นหาเว็บไซต์

ความสนุกใน 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