|May the source be with you, but remember the KISS principle ;-)|
|Contents||Bulletin||Scripting in shell and Perl||Network troubleshooting||History||Humor|
|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 ] filehere 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.
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
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.
headhead 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"