web-dev-qa-db-fra.com

awk - Comment imprimer le nombre de caractères pour les n premières lignes d'un fichier?

J'ai une commande:

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

Il affiche le nombre de caractères de chaque ligne dans un fichier passwd:

52
52
61
48
81
58
etc.

Comment puis-je imprimer le nombre de caractères pour les n premières lignes seulement?

Par exemple, pour les 3 premières lignes, cela donnerait quelque chose comme:

52
52
61
10
bambosze_babuni

Dites à awk de quitter lorsque suffisamment de lignes ont été lues:

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

Notez que cette solution ignore les lignes vides, mais pas pour le nombre de lignes.

17
Thor

Une version directe en Awk (pas aussi efficace que @ Thor's), mais un peu plus claire:

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

Vous pouvez l'exécuter avec la commande awk only, comme décrit joliment par @Thor, et @JJoao (+1 de moi)

Vous pouvez combiner les noms awk et head avec le paramètre -n suivi du nombre de lignes décrit ci-dessous:

Merci pour la suggestion de @Maerlyn d’exécuter dans cet ordre: head | awk

par exemple. Vous obtiendrez les 3 premières lignes en utilisant:

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

chef homme

-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 
5
Yaron