J'ai une commande:
$ awk '{ print length($0); }' /etc/passwd
Il imprime 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
command-line
text-processing
awk
bambosze_babuni
la source
la source
awk '(NR<=line) && length($0) {print length($0)}' line=3 file
Réponses:
Dites
awk
de quitter quand suffisamment de lignes ont été lues:Notez que cette solution ignore les lignes vides, mais pas pour le nombre de lignes.
la source
Une version directe en Awk (pas aussi efficace que @ Thor's), mais un peu plus claire:
la source
awk '{ print length } NR>=3 { exit }' /etc/passwd
, je le voterais.Vous pouvez l'exécuter avec
awk
seulement une commande, comme bien décrit par @Thor, et @JJoao (+1 de moi)Vous pouvez combiner
awk
ethead
avec paramètre-n
suivi par le nombre de lignes comme 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:
homme à la tête
la source
head -n3 /etc/passwd | awk
alors awk n'a pas à traiter tout le fichier.head
.head
été la première solution de travail qui m'est venue à l'esprit. J'ai voté @Thor, @JJoao répondre qui utiliseawk
uniquement la solution.