awk - วิธีการพิมพ์จำนวนตัวอักษรสำหรับบรรทัดแรกของ n บรรทัดในไฟล์?


10

ฉันมีคำสั่ง:

$ awk '{ print length($0); }' /etc/passwd

มันพิมพ์จำนวนตัวอักษรของทุกบรรทัดในไฟล์passwd :

52
52
61
48
81
58
etc.

ฉันจะพิมพ์จำนวนอักขระสำหรับเฉพาะบรรทัดแรกได้อย่างไร

ตัวอย่างเช่น - สำหรับ 3 บรรทัดแรกมันจะให้อะไรเช่น:

52
52
61

@ilkkachu จริง
njzk2

หากคุณต้องการละเว้นช่องว่างให้ใช้ด้านล่าง - awk '(NR<=line) && length($0) {print length($0)}' line=3 file
VIPIN KUMAR

คำตอบ:


17

บอกawkให้เลิกเมื่ออ่านบรรทัดมากพอ:

awk '$0 = length; NR==3 { exit }' /etc/passwd

โปรดทราบว่าวิธีนี้จะไม่สนใจบรรทัดที่ว่างเปล่า แต่ไม่ใช่สำหรับการนับบรรทัด


หากินและเด็ด! (+1)

2
หากมีเส้นว่างหรือว่างเปล่าการกำหนดจะประเมินเป็นศูนย์ (ค่าที่ผิดพลาด) และความยาวจะไม่ถูกพิมพ์
ilkkachu

@ilkkachu: ขึ้นอยู่กับสถานการณ์มันจะสมเหตุสมผลที่จะละเว้นบรรทัดว่าง ฉันได้เพิ่มบันทึกเกี่ยวกับเรื่องนี้
Thor

14

รุ่น Awk โดยตรง (ไม่มีประสิทธิภาพเท่ากับ @ Thor's) แต่ชัดเจนกว่าเล็กน้อย:

awk 'NR <= 3 {print length}' /etc/passwd

3
ถ้านี่awk '{ print length } NR>=3 { exit }' /etc/passwdฉันจะลงคะแนน
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบต่อไป

3
@DennisWilliamson ขอบคุณ นั่นเป็นข้อเสนอแนะที่ดีมากฉันจะไม่รวมไว้ในคำตอบของฉันเพราะมันมีอยู่แล้วในข้อเสนอของ Thor

5

คุณสามารถดำเนินการได้ด้วยawkคำสั่งเท่านั้นตามที่อธิบายไว้อย่างดีโดย @Thor และ @JJoao (+1 จากฉัน)

คุณสามารถรวมawkและheadกับพารามิเตอร์-nตามด้วยจำนวนบรรทัดตามที่อธิบายไว้ด้านล่าง:

ขอบคุณสำหรับคำแนะนำ @Mererlyn ที่จะดำเนินการตามลำดับนี้: head | awk

เช่นคุณจะได้รับ 3 บรรทัดแรกโดยใช้:

head -n3 /etc/passwd | awk '{ print length($0); }' 

หัวหน้าคน

-n, --lines=[-]K
    print the first K lines instead of the first 10; with the leading '-', print all but the last K lines of each file 

@ msjavx86 - ยอดเยี่ยม :) โปรดยอมรับ คำตอบเมื่อคุณสามารถทำได้
Yaron

แน่นอนฉันจะ - ประมาณ 10 นาที;) ขอบคุณอีกครั้ง!
bambosze_babuni

8
อาจย้อนกลับได้head -n3 /etc/passwd | awkดังนั้น awk จึงไม่ต้องดำเนินการกับไฟล์ทั้งหมด
Maerlyn

1
AWK headสามารถนับเส้นไม่มีความจำเป็นในการ
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบต่อไป

@DennisWilliamson - ขอบคุณสำหรับความคิดเห็นการใช้headเป็นวิธีแก้ปัญหาการทำงานแรกที่มาถึงใจของฉัน ฉัน upvoted @Thor, @JJoao ตอบซึ่งใช้awkวิธีแก้ปัญหาเท่านั้น
Yaron
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.