awk - Bir dosyadaki ilk n satırın karakter sayısı nasıl yazdırılır?


10

Bir komutum var:

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

Bir passwd dosyasındaki her satırın karakter sayısını yazdırır :

52
52
61
48
81
58
etc.

Yalnızca ilk n satır için karakter sayısını nasıl yazdırabilirim?

Örneğin - ilk 3 satır için şöyle bir şey verir:

52
52
61

@ilkkachu doğru.
njzk2

Eğer boş gibi görmezden gelmek istiyorsanız, aşağıdaki gibi kullanın - awk '(NR<=line) && length($0) {print length($0)}' line=3 file
VIPIN KUMAR

Yanıtlar:


17

awkYeterli satır okunduğunda bırakmayı söyle :

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

Bu çözümün satır sayısı için olmasa da boş satırları yok saydığını unutmayın.


zor ve havalı! (+1)

2
Herhangi biri veya satır boşsa, atama sıfır olarak değerlendirilir (bir sahte değer) ve uzunluk yazdırılmaz.
ilkkachu

@ilkkachu: Duruma bağlı olarak, boş satırları göz ardı etmek makul olacaktır. Bu konuda bir not ekledim.
Thor

14

Doğrudan Awk sürümü (@ Thor'unki kadar verimli değil), ancak biraz daha net:

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

3
Eğer awk '{ print length } NR>=3 { exit }' /etc/passwdöyleyse, onu iptal ederdim.
sonraki duyuruya kadar duraklatıldı.

3
@DennisWilliamson, teşekkür ederim. Bu çok iyi bir öneri, cevabıma dahil etmeyeceğim çünkü zaten Thor'un önerisinde açıkça var.

5

awk@Thor ve @JJoao (benden +1) tarafından güzel açıklandığı gibi tek komutla çalıştırabilirsiniz.

Aşağıdaki parametrelerle awkve headparametrelerini -naşağıda açıklandığı gibi satır sayısına göre birleştirebilirsiniz :

Bu sırayla yürütülecek @Maerlyn önerisi için teşekkürler: head | awk

Örneğin, ilk 3 satırı aşağıdakileri kullanarak alırsınız:

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

baş adam

-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 - harika :) lütfen cevabı kabul edin, ne zaman yapabileceksiniz
Yaron

tabii ki - yaklaşık 10 dakika içinde;) tekrar teşekkürler!
bambosze_babuni

8
Belki tersine head -n3 /etc/passwd | awkdöndüğünde, awk'ın tüm dosyayı işlemesi gerekmez.
Maerlyn

1
AWK hatları sayabilir, gerek yok head.
sonraki duyuruya kadar duraklatıldı.

@DennisWilliamson - yorum için teşekkürler, headaklıma gelen ilk çalışma çözümü kullanmak oldu. Ben awksadece çözüm kullanan @Thor, @JJoao cevap upvoted ettik .
Yaron
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.