รับบรรทัดที่ปรากฏบ่อยที่สุดจากไฟล์ใน Linux


11

ฉันมีไฟล์ข้อความที่มีคำต่าง ๆ ต่อบรรทัด
ฉันจะค้นหา 12 บรรทัดที่ปรากฏบ่อยที่สุดในไฟล์และแสดงได้อย่างไร?
ฉันไม่ค่อยเก่งกับคำสั่งการเขียนสคริปต์

ถ้าฉันสามารถรับคำสั่งและคำอธิบายเพื่อที่ฉันจะสามารถเข้าใจวิธีการใช้และเพิ่มพูนความรู้เกี่ยวกับคำสั่งมันจะยอดเยี่ยมมาก!


คำตอบ:


21

คุณสามารถทำได้โดยใช้คำสั่งในตัว

  • sortฟีดเนื้อหาของแฟ้ม เราต้องการสิ่งนี้สำหรับขั้นตอนต่อไป
  • uniq -cนี้ไป มันจะนับการเกิดขึ้นที่ไม่ซ้ำกันของแต่ละบรรทัด หากบรรทัดที่คล้ายกันไม่ได้อยู่ติดกันจะไม่สามารถทำงานได้โดยไม่ต้องคัดแยกมาก่อน
  • จากนั้นป้อนไปยังอีกsortซึ่งตอนนี้เรียงลำดับในการกลับรายการ ( r) และขึ้นอยู่กับการnตีความตัวเลข ( ) ของการuniqส่งออก เราต้องการตัวเลือกที่เป็นตัวเลขเนื่องจากไม่เช่นนั้นพื้นที่ด้านหน้าของตัวเลขจะนำไปสู่ผลลัพธ์ที่ไม่ถูกต้อง (ดูที่GNU sortช่วยมาก)
  • headสุดท้ายแสดงเฉพาะสิบสองสายแรกที่มี

คำสั่งก็จะเป็น:

sort test.txt | uniq -c | sort -rn | head -n 12

เอาต์พุตที่นี่มีจำนวนจริงของการเกิดขึ้น

หากต้องการรับรายการดิบของบรรทัดเท่านั้นคุณสามารถไพพ์เอาต์พุตไปที่sed:

sort test.txt | uniq -c | sort -rn | head -n 12 | sed -E 's/^ *[0-9]+ //g'

ตัวอย่าง:

I'm not there very often
I'm not there very often
Look at me!
Look at me!
Look at me!
Hello there!
Hello there!
Hello there!
Hello there!
Hello there!
Hello there!

เอาต์พุตจากคำสั่งแรก แต่เลือก 2 จากhead:

6 Hello there!
3 Look at me!

เอาต์พุตจากคำสั่งที่สอง:

Hello there!
Look at me!

1
uniqคุณมีการเรียงลำดับก่อนที่จะใช้
cYrus

! @slhck: ขอบคุณหนึ่งคำถาม: ในsort -rnทุกประเภทในการสั่งซื้อกลับใช้เป็นเขตการเรียงลำดับหมายเลขที่อยู่ถัดจากแต่ละบรรทัดผลิตโดยuniq -c? ผมคิดว่าสิ่งที่ชอบk1หรือสิ่งที่ต้องการที่จะใช้
จิม

@Jim แน่นอน rหลีและประเภทตัวเลขจำนวนที่ผลิตโดยn uniqคุณหมายถึงอะไรกันแน่k1?
slhck

@slhck: ฉันพยายามที่จะเข้าใจคำสั่งเหล่านี้โดยใช้manและฉันเข้าใจว่า-kต้องใช้ไวยากรณ์ที่ใช้บางสิ่งเพื่อเลือกฟิลด์ที่จะเรียงลำดับ
จิมม

@cYrus: กรณีขอบอะไรที่จำเป็นต้องมีการเรียงลำดับล่วงหน้า?
Jim

3

หาก distro ของคุณมีlogtop

cat your_file | logtop

หากไฟล์ของคุณเติบโตอย่างต่อเนื่องเช่นไฟล์บันทึกให้ลอง:

tail -f your_log | logtop
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.