เขียนไปยังไฟล์คำที่พบบ่อยที่สุดโดยเคาน์เตอร์กับลินุกซ์


1

ฉันต้องการเขียนคำที่ปรากฏอย่างน้อย X ครั้งในข้อความ ตัวอย่างเช่นสำหรับ:

a
b
a
c
b

และ X = 2 ฉันจะได้รับ:

a
b

การวิจัยของคุณคืออะไรจนถึง คุณลองทำอะไรด้วยตัวเอง?
Kamil Maciorowski

ฉันพบวิธีคืนคำที่พบบ่อยที่สุดด้วย: sort test.txt | uniq -c | เรียง -rn | head -n 12 หรือ: sort test.txt | uniq -c | เรียง -rn | หัว -n 12 | sed -E 's / ^ * [0-9] + // g'
Shani Gamrian

คำตอบที่ได้รับการยอมรับสำหรับคำถามนี้นับจำนวนคำของไฟล์ข้อความอาจตรงกับความต้องการของคุณ
Nevin Williams

คำตอบ:


1

นี่เป็นพื้นฐานแม้ว่ามันจะค่อนข้างช้าในรายการคำที่มีขนาดใหญ่: -

set Count
sort < WordList | uniq | while read w; \
    do [ $(grep -c "^$w$" WordList) -ge $1 ] && echo $w; done

คำตอบที่เร็วขึ้น (ขอบคุณ Kamil Maciorowski): -

set Count
sort < WordList | uniq -c | while read c w; do [ $c -ge $1 ] && echo $w; done

สิ่งนี้ถือว่า: -

  • คุณจะตั้งค่าของคุณเองFileListและCountรายการ
  • WordListคำพูดที่เป็นหนึ่งต่อบรรทัดใน
  • กรณีมีความสำคัญ (เช่นTheและtheแตกต่างกัน)
  • นี่คือรายการบรรทัดคำสั่ง: ในสคริปต์set Countจะถูกละเว้นและส่งผ่านเป็นพารามิเตอร์

สิ่งนี้จะช่วยให้คุณเริ่มต้นได้แม้ว่าคุณจะต้องปรับเปลี่ยนตามความต้องการของคุณอย่างแน่นอน


คุณหมายถึงอะไรเมื่อคุณพูดว่า: คุณจะตั้งค่ารายการ FileList และ Count ของคุณเอง
Shani Gamrian

มันอาจจะเร็วกว่าด้วยuniq -c(แน่นอนว่าต้องสร้างตรรกะใหม่อีกครั้ง)
Kamil Maciorowski

@ShaniGamrian - FileListเป็นชื่อของไฟล์ที่มีคำว่า; Countคือจำนวนรายการที่คุณต้องการตรวจสอบ ฉันคิดว่ามันจะชัดเจน: ขอโทษถ้ามันไม่ชัดเจนสำหรับคุณ
AFH

@ KamilMaciorowski - ขอบคุณสำหรับคำแนะนำของคุณ: ฉันลืมไปแล้วuniq -cและมันก็ง่ายกว่าและเร็วกว่ามาก ฉันได้เพิ่มเข้าไปในคำตอบของฉันแล้ว
AFH

ขอบคุณ!!! ฉันจะเขียนผลลัพธ์ไปยังไฟล์ได้อย่างไร?
Shani Gamrian
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.