Unix tricks - Useful but unusual

RELATED TOPICS

Let's explore a few unusual Unix tricks that you might not have seen before.

First, let's look at the paste command. It's more or less the opposite of the cut command which you have probably seen or used to slice some text from its input. The paste command, on the other hand, splices together input from multiple files, lining the text from each source in a side-by-side fashion. Let's look at an example.

If you have three files, each with a small amount of text on each line, for example, you can paste the files together like this:

boson> paste file1 file2 file3
alligators       1,345   xenops
bears    2,890   yaks
cats     3,154   zebras

The output of paste will be more or less columnar, depending on the width of each file's data. Of course, if you want to stash the output in a fourth file, you only have to redirect it.

boson> paste file1 file2 file3 > file4

Another useful "trick" is to make use of the options that come with the cat command to display unusual data in files. The -v option, for example, will display unprintable characters. If you have octal 13 characters in your file, for example, cat -v will display them as ^K characters and octal 7s as ^G.

boson> cat -v file4
A hen is only an egg's way of making another egg.
        Samuel Butler
^G^G^G^G^G
-----
boson> cat file4
A hen is only an egg's way of making another egg.
        Samuel Butler

-----

They would otherwise appear as a blank line at the end of the file.

If you use a -e (-ve on Solaris), line endings will be displayed with a $ as shown here:

boson> cat -ve file4
A hen is only an egg's way of making another egg.$
        Samuel Butler$
^G^G^G^G^G$

A -t (-vt on Solaris) will display tabs as ^I characters.

boson> cat -vt file4
A hen is only an egg's way of making another egg.
^ISamuel Butler
^G^G^G^G^G

And, of course, you can combine these options if you like:

boson> cat -vet file4
A hen is only an egg's way of making another egg.$
^ISamuel Butler$
^G^G^G^G^G$
-----$

One more. There are numerous ways to omit blank lines from text displays or to remove them from files. I've often used the beginning of line and end of line markers together like this "^$" to indicate a line with no content.

grep -v "^$" file
grep -v "^$" file > newfile

An even easier way to do the same thing is to match on any character like this:

cat file | grep .
cat file | grep . > newfile

Better yet, you can avoid the pipe and save a few CPU cycles:

grep . file

The "." will match on any character (but not linefeeds), so any line containing any type of content will be displayed. Plus, if you only want to see lines with more than one character or at least three characters, you can expand your matching string to "..", "..." and so on.

RELATED TOPICS
What’s wrong? The new clean desk test
View Comments
You Might Like
Join the discussion
Be the first to comment on this article. Our Commenting Policies