Softpanorama

May the source be with you, but remember the KISS principle ;-)
Contents Bulletin Scripting in shell and Perl Network troubleshooting History Humor

head command

News Unix Utilities Recommended Links Tail Syntax Reference Pipes
tac command Syslog viewers Syslog analyzers Log Colorizing uniq tr Logwatch
Perl re-implemenations Syslog tips sort Perl One-Liners AWK Humor Etc

The external head  command displays the first few lines of a file. It displays however many lines you specify as an option. If you do not specify the number of lines to display, head  defaults to ten. Its cousin is the tail  command.

     head [ -n ] file
here n is the number of lines to display starting from the beginning of each file. GNU head is much more capable than many people (even seasoned sysadmins) think.

By default, head prints the fist 10 lines. You can specify a specific number of lines with the --lines=n (or -n n) switch.

$ head -n 50 /var/log/messages

You can abbreviate the -n switch to a minus sign and the number of lines.

$ head -50 /var/log/messages

Combining tail and head in a pipeline, you can display any line or range of lines in the file:

$ head -5000 /var/log/messages | tail -100

If the starting line is a plus sign instead of a minus sign, tail counts that number of lines from the start of the file and prints the remainder. This is a feature of tail, not the head command.

$ tail +1700 /var/log/messages

When using head or tail on arbitrary files in a script, always check to make sure that the file is a regular file to avoid unpleasant surprises.

The head command and, especially,  tail  command are often used in Web log analysts based on pipes.

 

Tips

The head  command is useful for verifying what type of data is in a file. It can be used to view the first few lines of an ASCII file to visually decide what data is contained in the file. You might consider head  as a special version of the cat  command, allowing you to view the beginning portion of the file.

If more than one file is specified on the command line, head  precedes each file with a line like:

     ===> filename <===

If only one file is given on the command line, head  does not inform you of the filename being displayed

If you want the name of the file displayed despite the fact that its the only one you can use /dev/null as the second file or the first file

head -10 file /dev/null

You may choose to use head  to display the entire contents of multiple short files so each file will be preceded by its filename.  In this case you need to specify n large enough. The following command provides an example:

head -99999 file1 file2 file3

Top Visited
Switchboard
Latest
Past week
Past month

NEWS CONTENTS

Old News ;-)

Unix Tools for Web log Analysis

% sort -t" " -k 3 a.txt | head -1

TTTT head and tail

Sometimes you don't want to look at a whole file or all the output from a command, but just the first or last few lines of it.

head and tail provide a means to this end. Unfortunately, they seem to have been written by different people with different ideas about what would be useful, so they work a little differently.

head

head is used to show the first few lines of a file or stream. By default it shows 10 lines:
% ypcat passwd | head
bsmith:*:1243:317:Bob Smith:/home/baker-a/bsmith:/bin/csh
wayne:*:182:60:Wayne Simpson:/home/wayne:/bin/csh
walker:*:1791:100:Lisa Walker:/home/dogbert-a/walker:/bin/csh 
jim:*:1644:100:Jim Smith:/home/dogbert-a/jim:/bin/csh
paul:*:1724:135:Paul Jones:/home/dilbert-a/paul:/bin/csh 
harry:*:1611:100:Harry Palmer:/home/pkduck-f/harry:/bin/csh
alex:*:1959:100:Alex Watson:/home/alex:/bin/csh 
sue:*:1988:100:Sue Foo:/home/sue:/bin/csh
marty:*:1318:78:Marty Taylor:/home/manfac-a/home/marty:/bin/csh

You can specify a different number of lines by prefacing the number with a hyphen ("-"):
% ypcat passwd | head -2
bsmith:*:1243:317:Bob Smith:/home/baker-a/bsmith:/bin/csh
wayne:*:182:60:Wayne Simpson:/home/wayne:/bin/csh

If you specify more than one filename on the commandline, head will show the first few lines of each file with a one-line banner identifying each file:
% head -2 /usr/man/man1/head.1 /usr/man/man1/tail.1
==> /usr/man/man1/head.1 <==
.\" @(#)head.1 1.17 90/02/15 SMI; from UCB 4.1
.TH HEAD 1 "9 September 1987"

==> /usr/man/man1/tail.1 <==
.\" @(#)tail.1 1.14 90/02/15 SMI; from S5R2 6.2 83/09/02
.TH TAIL 1 "14 August 1989"