How to Display File Contents in Column Format in Linux Terminal

Sometimes you may want to display the contents of a file in the columnar format while working on the command line in Linux. Luckily, there is a Linux command Column that allows you to display contents of the file in a columnar format. It is very simple and easy to use command line utility.

This command line utility converts the input file into multiple columns and you can convert the content into the columns based on any delimiter. Column command fills rows before column.

Today we are going to look at the basics of Column command and how we can use it in a most useful way to format the content. For this article, I am using Ubuntu 18.04 LTS for describing the procedure.

Syntax of Column command

The general Syntax of the column command is:

$ column [parameters] [filename]

In the [parameters], you can specify the following options:

-s specifies a delimiter character.

-c output is formatted based on total characters allowed in one row.

-t create a table, by default spaces or the character specified with –s option are used as a delimiter

-x by default, rows are filled before column, but using this parameter you can fill column before filling rows

-n by default multiple delimiters are merged as a single delimiter. You can disable this behavior using –n parameter.

-e by default, empty lines are ignored. You can disable this behavior using –e parameter.

Column command usage

For instance, I have created a test file name “test” that has content shown in the below image. Note that you can view the content of a file without opening it using cat command in Terminal.

Launch the Terminal by pressing Ctrl+Alt+T and type:

$ cat [filename]

My test file looks like:

Content of the test file

To see what the column command actually does, type column followed by the filename:

$ column [filename]

By entering the above command, you will see that this command has converted the content of the file into columns.

Column command usage

This was the simplest explanation of the Column command. Now we will see some more uses of this command.

Using a custom delimiter or a separator

You can use a custom separator in a Column command that will tell it when it should split the content into new columns.

I am using a test file that contains the content as shown in the image below. It contains the data separated by commas.

CSV test file

Use –t parameter to display the content in tabular format. By default, it uses space as a delimiter.

Column command for csv files

To separate the content based on a specific delimiter, use –s parameter followed by the particular separator or delimiter as shown in the below command syntax:

$ column -t [-s separator] [filename]

Split file by comma

Add multiple delimiters using -n parameter

By default, column command merges the multiple adjacent separators in a single seperator. For instance, we have a sample file that contains the content having multiple adjacent separators as shown in the image below.

Column command will consider the multiple separators as a single one and will display the output as below

Adding the –n option will disable this behavior. Run the command in the below syntax:

$ column [-n] [-t] [-s separator] [filename]

The -n option of column command

You will notice the space between the first two columns, which implies that it has not merged the adjacent separators into a single one.

Add empty lines using -e parameter

By default, the column command ignores the empty lines. If you want to include those empty lines in your columns, use –e parameter.

For instance, I have the following sample file with a few empty lines in it.

Another test file

I have used the column command but you can see that column command has not included the empty lines.

column command result

To allow the column command to include that empty lines in the output, use the command in the below syntax:

$ column [-e] [-t] [-s separator] [filename]

Linux column command in action

You will notice that the empty lines are now included in the output of column command.

Fill columns before rows using -x parameter

The Column command converts content into the columns by initially filling the rows then columns that may be inappropriate for some files. However, you can change this behavior and can fill columns before filling rows. For a clear understanding, see the below example.

In this example, I have a test file named “xyz” containing some content. My test file looks like:

Test file with content split by newline

Using the Column command will display the output like below. however that is not appropriate for the above type of file.

column command without parameters

For this, we will use the –x parameter. Type column followed by –x and the filename.

$ column [-x] [filename]

The -x command parameter

Now you will notice that this output is in an appropriate format for our above sample file.

Changing the display width using -c parameter

You can stretch out the display width of the command output. Specify the width of the row by using –c parameter in the column command. In this example, I have a file named “xyz” containing some content as shown below.

Test file content

Using just the column command displays the output like this:

Column command without parameters

To change the width of the display, type command followed by –c parameter. To reduce the width of the display, I have entered the command in below syntax:

$ column [-c characters] [filename]

Using -c parameter

To increase the width of the display I have entered the command as shown in the image below:

Using -c parameter to define width

Now you can see that the width of the display has increased.

Save the columnated output

To save the formatted output that you have accomplished using Column command, you can use the below command in Terminal. The syntax of the command will be:

$ column [parameters] [filename1] > filename2

Save formatted content to file

That is all for now. You have seen that through basic yet helpful examples of column command described in this article, you can get a complete grip on the command and use it to format your content which otherwise you have to do manually by hand.