Unix/Linux FAQ: How can I print columns of data from text files on Unix/Linux systems?
Background
One of my favorite ways to use the Unix awk
command is to print columns of data from text files, including printing columns in a different order than they are in in the text file. Here are some examples of how awk
works in this use case.
awk column printing examples
Suppose you have a file named foo with these contents, three columns of data separated by blanks:
$ cat foo 1 2 3 a b c
Next, here are the awk
examples that show how to print the columns of data:
$ awk '{ print $1 }' foo 1 a $ awk '{ print $2 }' foo 2 b $ awk '{ print $3 }' foo 3 c $ awk '{ print $1, $3 }' foo 1 3 a c $ awk '{ print $3, $1 }' foo 3 1 c a
As you can see, with awk
you can print any column you want, and you can easily rearrange the order of the columns when you print them out.
If you’re not familiar with awk
, notice how it automatically loops over every line in the text file. This built-in ability to process every line in the input file is a great feature of awk
.
While all of these examples show how awk
works on a file, it can also read its input from a Unix pipeline, like this:
$ cat foo | awk '{ print $3, $1 }' 3 1 c a
Using a field separator with awk
If you need to specify a field separator — such as when you want to parse a pipe-delimited or CSV file — use the -F
option, like this:
awk -F "|" '{ print $4 }' Notes.data
Summary
As shown, awk
is a great tool for printing columns and rearranging column output when working with text files.