I have a command:

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

It prints number of characters of every line in a passwd file:

52 52 61 48 81 58 etc. 

How can I print the number of characters for only the first n lines?

For example - for the first 3 lines it would give something like:

52 52 61 
2

3 Answers

Tell awk to quit when enough lines have been read:

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

Note that this solution ignores empty lines, although not for the line count.

3

A direct Awk version (not so efficient as @Thor's), but slightly more clear:

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

You can execute it with awk only command, as nicely described by @Thor, and @JJoao (+1 from me)

You can combine awk and head with parameter -n follows by the number of lines as described below:

Thanks for @Maerlyn suggestion to execute in this order: head | awk

e.g. You will get the first 3 lines using:

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

head man

-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

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy