นับจำนวนครั้งที่แต่ละบรรทัดปรากฏในไฟล์


คำตอบ:


23

ฉันคิดออก; หนึ่งในuniqตัวเลือกคือ-cสำหรับ "คำนำหน้าบรรทัดตามจำนวนที่เกิดขึ้น":

$ uniq -c

1
โปรดทราบว่าใส่ตัวเลขก่อน หากคุณจู้จี้เกี่ยวกับคำสั่งซื้อคุณสามารถทำได้:uniq -c filename.txt | sed 's/[^0-9]*\\([0-9]\+\\) \\(.*\\)/\2 \1/'
frabjous

12
นอกจากนี้โปรดทราบว่าจะนับเฉพาะจำนวนการเล่นซ้ำที่อยู่ติดกันเท่านั้น สำนวนที่พบบ่อยคือsort | uniq
Steven D

4
uniq ยังวางการนับจำนวนที่อยู่ด้านหน้าของตัวเลข คำถามเดิมจะต้องมีอะไรเช่นนี้จริง ๆ : sort filename | uniq -c | awk '{พิมพ์ $ 2, $ 1}'
Bruce Ediger

ในกรณีที่ไม่ชัดเจนจากความคิดเห็นข้างต้นคุณต้องแน่ใจว่าข้อมูลถูกเรียงลำดับก่อนเพื่อให้บรรลุเป้าหมายของคุณ หากยังไม่ได้เรียงคุณจะมีรายการซ้ำ ตัวอย่างเช่นถ้าไฟล์ต้นฉบับของคุณแทนที่จะเป็นA \ A \ A \ B \ A \ CCผลผลิตเพียงuniq -cจะแสดงและการแสดงในภายหลังA 3 A 1การเรียงลำดับก่อนจะรับประกันว่ามีการรวมกลุ่มของบรรทัดที่เหมือนกันทั้งหมด
drootang

16

ฉันเพิ่งมาที่นี่พร้อมกับปัญหาที่คล้ายกัน จากนี้ฉันจัดการเพื่อรวบรวมคำสั่งขั้นสูงเล็กน้อยซึ่งฉันหวังว่าจะเป็นประโยชน์สำหรับผู้อื่น

ดังที่สตีเว่นดีกล่าวในความคิดเห็นข้างต้นuniqมีเพียงจำนวนบรรทัดการทำซ้ำที่อยู่ติดกันดังนั้นคุณต้องเรียงลำดับบรรทัดก่อน หลังจากนั้นเราจะพบบรรทัดที่ไม่ซ้ำกันแล้วเรียงลำดับอีกครั้งดังนั้นบรรทัดที่เกิดขึ้นส่วนใหญ่จะอยู่ด้านบน

sort file.txt | uniq -c | sort -nr > output.txt

output.txtเอาท์พุทถูกเปลี่ยนเส้นทางไปลงในแฟ้ม หากคุณเพียงต้องการดูผลลัพธ์ในบรรทัดคำสั่งให้ลบการเปลี่ยนเส้นทางและเปลี่ยนคำสั่งสุดท้ายเป็นsort -nเพื่อให้บรรทัดที่พบบ่อยที่สุดจะอยู่ที่ด้านล่างนั่นคือยังอยู่บนหน้าจออย่างแน่นอน


4
คุณสามารถแทนที่มีเพียงcat file.txt | sort sort file.txt:)
mattdm

1
@mattdm: ข้อเสียของสูตรนั้นคือคุณไม่สามารถแทนที่catสิ่งที่น่าสนใจได้อย่างรวดเร็ว catตั้งแต่คุณรู้ว่าไม่มี
SamB

1
@SamB < file.txt sort | uniq -cแล้วเขียนเป็น catนี้เป็นเรื่องง่ายที่จะแก้ไขและยังคงหลีกเลี่ยงไม่จำเป็น
hvd
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.