cat
The Linux cat command at first seems so simple as to be unnecessary. In actuality, it is an excellent example of the Unix philosophy: create programs which do one thing and do it well. The thing cat does well is display the contents of a file or files. Many other utilities can handle this task, but none have all the options cat does. First, let's look at the simplest case:
cat /etc/motdThis command will display the contents of the motd (messages of the day) file to your screen. Unlike more (or less), cat will not stop when the screen is full. This is a feature, not a bug. You don't want pauses when redirecting (using the > operator) cat's output to a device, e.g., a printer or modem:
cat /etc/motd > /dev/modemcat comes from the word conCATenate, which describes one of its best uses: to concatenate or “glue together” two or more files. If you have several individual files about animals you would like to collect together into one file, cat will do the work for you. For example:
cat tiger lion cougar > bigcatswould redirect the concatenation output, containing the three feline files in the specified order, into a new file named bigcats. If you find another file, panther, that needs to be added to the bigcats file, use cat with the append (>>) operator in the following way:
cat panther >> bigcatsUsing >> ensures any prior content of bigcats is preserved. The content of panther is appended to bigcats. If you were to use the > operator here, you would replace the contents of bigcats with the contents of panther. Always use >> when you wish to add to the end of an existing file.
Be careful not to use the same file name when redirecting the output of the cat command, or you could lose one of the files. For example, don't do the following:
cat myfile yourfile > yourfile
In this case yourfile gets overwritten by myfile.
Another surprisingly handy use for cat is to redirect standard input like this:
cat > newfile some notes I want to save in newfile. CTRL-D
This creates a new file (named newfile). You type as much text as you wish, then type ctrl-D to save the file. You can backspace over mistakes, but you cannot go to a previous line after you press the enter key. I often teach this particular option of cat to novice Unix users, who occasionally need to create simple files, but don't want to learn vi or other simple editors. There may be Unix systems without vi or your favorite editor, but cat is always there.
The operator >> can also be used to append notes to the end of newfile:
cat >> newfile Adding another note to newfile. CTRL-D
Like most Unix commands, the behavior of cat can be modified by command line switches. If you use the diff command to compare files, it will show you the numbers of lines that differ between the files. However, most files don't have line numbers. Use cat with the -n switch to number each line of a file:
cat -n kittens > num_kittens
The file num_kittens is kittens with a number in front of each line, including blank lines. Use the -b switch to number only lines that are not blank.
One last cat trick: using the -v switch will show you “hidden” characters, such as control characters that may not show up in your editor. Try this experiment:
cat > catestv CTRL-v testing CTRL-O Testing esc-b CTRL-D
If we use cat to view the file, we see only the normal text:
cat catestv Testing TestingTo see what's actually in the file, use the -v option:
cat -v catestv ^V Testing ^O Testing ^[bHere, a ^ in front of a character signifies a control character. (CTRL-[ is the same as ESC).
Patrick Hill (apathos@bham.net) is a computer engineer at Alabama Power Company in Birmingham, Alabama. He is known around the office as the guy who uses cat for an editor.
Realizing the promise of Apache® Hadoop® requires the effective deployment of compute, memory, storage and networking to achieve optimal results. With its flexibility and multitude of options, it is easy to over or under provision the server infrastructure, resulting in poor performance and high TCO. Join us for an in depth, technical discussion with industry experts from leading Hadoop and server companies who will provide insights into the key considerations for designing and deploying an optimal Hadoop cluster.
Sponsored by AMD
Built-in forensics, incident response, and security with Red Hat Enterprise Linux 6
Every security policy provides guidance and requirements for ensuring adequate protection of information and data, as well as high-level technical and administrative security requirements for a system in a given environment. Traditionally, providing security for a system focuses on the confidentiality of the information on it. However, protecting the data integrity and system and data availability is just as important. For example, when processing United States intelligence information, there are three attributes that require protection: confidentiality, integrity, and availability.
Learn more about catching the bad guy in this free white paper.
Sponsored by DLT Solutions
| Designing Electronics with Linux | May 22, 2013 |
| Dynamic DNS—an Object Lesson in Problem Solving | May 21, 2013 |
| Using Salt Stack and Vagrant for Drupal Development | May 20, 2013 |
| Making Linux and Android Get Along (It's Not as Hard as It Sounds) | May 16, 2013 |
| Drupal Is a Framework: Why Everyone Needs to Understand This | May 15, 2013 |
| Home, My Backup Data Center | May 13, 2013 |
- New Products
- Linux Systems Administrator
- Senior Perl Developer
- Technical Support Rep
- UX Designer
- Web & UI Developer (JavaScript & j Query)
- Designing Electronics with Linux
- Dynamic DNS—an Object Lesson in Problem Solving
- Making Linux and Android Get Along (It's Not as Hard as It Sounds)
- Using Salt Stack and Vagrant for Drupal Development
- Reply to comment | Linux Journal
4 hours 44 min ago - Nice article, thanks for the
15 hours 24 min ago - I once had a better way I
21 hours 10 min ago - Not only you I too assumed
21 hours 28 min ago - another very interesting
23 hours 21 min ago - Reply to comment | Linux Journal
1 day 1 hour ago - Reply to comment | Linux Journal
1 day 8 hours ago - Reply to comment | Linux Journal
1 day 8 hours ago - Favorite (and easily brute-forced) pw's
1 day 10 hours ago - Have you tried Boxen? It's a
1 day 16 hours ago
Enter to Win an Adafruit Pi Cobbler Breakout Kit for Raspberry Pi

It's Raspberry Pi month at Linux Journal. Each week in May, Adafruit will be giving away a Pi-related prize to a lucky, randomly drawn LJ reader. Winners will be announced weekly.
Fill out the fields below to enter to win this week's prize-- a Pi Cobbler Breakout Kit for Raspberry Pi.
Congratulations to our winners so far:
- 5-8-13, Pi Starter Pack: Jack Davis
- 5-15-13, Pi Model B 512MB RAM: Patrick Dunn
- 5-21-13, Prototyping Pi Plate Kit: Philip Kirby
- Next winner announced on 5-27-13!
Featured Jobs
| Linux Systems Administrator | Houston and Austin, Texas | Host Gator |
| Senior Perl Developer | Austin, Texas | Host Gator |
| Technical Support Rep | Houston and Austin, Texas | Host Gator |
| UX Designer | Austin, Texas | Host Gator |
| Web & UI Developer (JavaScript & j Query) | Austin, Texas | Host Gator |
Free Webinar: Hadoop
How to Build an Optimal Hadoop Cluster to Store and Maintain Unlimited Amounts of Data Using Microservers
Realizing the promise of Apache® Hadoop® requires the effective deployment of compute, memory, storage and networking to achieve optimal results. With its flexibility and multitude of options, it is easy to over or under provision the server infrastructure, resulting in poor performance and high TCO. Join us for an in depth, technical discussion with industry experts from leading Hadoop and server companies who will provide insights into the key considerations for designing and deploying an optimal Hadoop cluster.
Some of key questions to be discussed are:
- What is the “typical” Hadoop cluster and what should be installed on the different machine types?
- Why should you consider the typical workload patterns when making your hardware decisions?
- Are all microservers created equal for Hadoop deployments?
- How do I plan for expansion if I require more compute, memory, storage or networking?




Comments
Good info
Hello! dbdegdd interesting dbdegdd site!
cat command for several grib files
I have many grib files (starting from ecmwf19860101.grb to ecmwf20090101.grb). These are basically daily files and the total number of files is nearly 30000 and I want to cat them into one file. When I use the command:
cat ecmwf*>ecmwf.grb
-bash: /bin/cat: Argument list too long
Why its not working on large number of files?
Is there any limit of using "cat" command?
Although I used above command for some of the files and it works.
Please advise me if it is possible to cat large number of grib files?
Thanks in advance.
Regards,
Mubashar
Problem in unix scripting
Hi , i am facing the problem in unix shell scripting.
not able to execute.
giving the error
./test: line 2: if[0 != 2]: command not found
./test: line 3: syntax error near unexpected token `then'
./test: line 3: `then'
Please help ASAP
Regards,
Lakshmi
White space
You're missing some needed whitespace:
- Between the "if" keyword and the "[" command.
- After the "[" command.
- Before the "]" argument to the "[" command.
- After the echo commands and their arguments.
It's also considered "good" practice, but not mandatory, to indent the commands within an "if" statement:
#!/bin/sh if [ $# -ne 2 ] then echo "Numbers not supplied" echo "Usage $0 number1 number2" exit 1 fi echo "the sume is `expr $1 + $2`"Mitch Frazier is an Associate Editor for Linux Journal.
1997...?
1997? Is this correct?
The time stamp of the posting says: "October 1st, 1997 by Patrick Hill"
That's only... 12 years ago! :x
No, I just posted this in
No, I just posted this in September of 2009
Using Cat
Hi,
I have used the cat command to put the contents of a large number of files into one large file. So I have each files contents in this large file without a blank line between the files. How can I add the filename before the contents of the file and a blank line between the files in my large output file?
Using Cat
OK, I have all the filenames showing before the contents and with a carriage return after the filename. I just need to know how to add a carriage return after each files contents. Here is the code.
#!/bin/sh
# no error checking
rm -f newfile
for i in *.spc;
do printf "%s\n" $i >> newfile
cat "$i" >> newfile
done
To print specific range of lines using cat
Hello Patrick,
I am using AIX Unix. How is it possible to select lines to be printed using cat ? If the file size is very big and say it has more than thousand lines and i want to print lines 65 to 70 on standard output.
Regards,
Immi.
To print specific lines using cat and sed commands
Hello Immi.
You can pipe the output of cat command to sed command as follows.
cat filename |sed -n '65,70p'
This will print lines 65 to 70 on standard output.
If you want to print only one line, you can use the following syntax.
cat filename |sed -n '5p'
This will print only line 50 of the file on standard output.
Sorry for the mistake.
Sorry for the mistake.
please read the last line of the my commend corrected as "...line 5 of the file...."
Re: Take Command: cat
Good examples. Something puzzles me though. I am taking a Unix class using Solaris 2.8 on Sun workstations, but I do my practicing on a PC with Linux (RedHat 8). In Unix you can create a new file with:
cat fileName
blah blah
Ctrl-D
But with Linux this produces a "no such file" error, so you must explicitely redirect the output with:
cat > fileName ...
I have tried it with all of the shells installed and get the same. I wonder why the difference?
Re: Take Command: cat
i am very thankful for the detailed information
of the cat command. many of the linux sites
are not having the basic information of cat
command which is must. i pity the negligence
attributed by the linux site maintainers.
any how i am thankful for the detailed and
friendly information.
thanking you