Introduction
Text columnization is a powerful technique in Linux that allows you to organize and display data in a structured tabular format. When working with plain text files containing delimited data, the content can be difficult to read without proper formatting. The column command in Linux solves this problem by transforming plain text into neatly formatted columns.
This lab will guide you through mastering the column utility on Linux. You will learn how to display file contents in a tabulated format, making data easier to read and analyze. These skills are essential for data processing and visualization in the command line environment.
Understanding the Column Command Basics
In this step, we will learn how to use the column command to format text into aligned columns, making data easier to read and interpret.
The column command is a utility in Linux that formats its input into multiple columns. This is particularly useful when dealing with data that has a natural structure but is stored in plain text format.
Creating a Sample Data File
Let's start by creating a simple text file that contains data we want to format. We'll create a file named powers_list.txt in the ~/project directory containing superpower names and their corresponding hero names, separated by a colon.
Navigate to the project directory:
cd ~/project
Now create the sample file using the echo command with the -e option, which enables interpretation of backslash escapes (like \n for newline):
echo -e "Telekinesis:Jane\nInvisibility:John\nSuper Strength:Max" > ~/project/powers_list.txt
Let's examine the content of the file we just created:
cat ~/project/powers_list.txt
You should see output like this:
Telekinesis:Jane
Invisibility:John
Super Strength:Max
This data is formatted with a colon (:) as the delimiter between the superpower name and the hero name. The format is not very readable as is.
Using the Column Command for Formatting
Now, let's use the column command to transform this data into a more readable format:
column -t -s ':' ~/project/powers_list.txt
In this command:
columnis the utility we're using-toption tells the command to create a table-like output-s ':'specifies that the delimiter (separator) in our input file is a colon~/project/powers_list.txtis the path to our input file
After executing this command, you should see the following output:
Telekinesis Jane
Invisibility John
Super Strength Max
Notice how the data is now neatly aligned in columns, making it much easier to read. The column command has automatically determined the width of each column based on the content and aligned everything accordingly.
This basic usage of the column command demonstrates its power in formatting text data for better readability.
Advanced Column Formatting with a Shell Script
In this step, we will create a shell script that makes it easier to columnize text files with different delimiters. This approach allows for more flexibility and efficiency when working with various data formats.
Understanding Shell Scripts
A shell script is a file containing commands that the shell can execute. It allows you to automate tasks by combining multiple commands and adding logic. In this case, we'll create a script that simplifies the process of columnizing files.
Creating the Columnize Script
Let's create a script named columnize.sh in the ~/project directory. This script will take two arguments: a filename and a delimiter character.
First, navigate to the project directory if you're not already there:
cd ~/project
Now, create the script file:
touch columnize.sh
Next, open the file with the nano text editor:
nano columnize.sh
Add the following content to the file:
#!/bin/bash
## A script to columnize text files
## Check if the correct number of arguments are provided
if [ "$#" -ne 2 ]; then
echo "Usage: $0 <filename> <delimiter>"
echo "Example: $0 data.txt :"
exit 1
fi
## Extract arguments
FILENAME=$1
DELIMITER=$2
## Check if the file exists
if [ ! -f "$FILENAME" ]; then
echo "Error: File '$FILENAME' does not exist"
exit 1
fi
## Format and output the content
column -t -s "$DELIMITER" "$FILENAME"
To save the file in nano, press Ctrl+O, then Enter, and to exit nano, press Ctrl+X.
Let's break down what this script does:
- The first line (
#!/bin/bash) tells the system to use the bash shell to execute the script. - We check if exactly two arguments were provided (a filename and a delimiter).
- We assign these arguments to variables for easier reference.
- We check if the specified file exists.
- Finally, we use the
columncommand with the provided filename and delimiter.
Making the Script Executable
Before we can use our script, we need to make it executable:
chmod +x ~/project/columnize.sh
Using the Columnize Script
Now we can use our script to columnize text files. Let's use it with our existing powers_list.txt file:
~/project/columnize.sh ~/project/powers_list.txt :
You should see the following output:
Telekinesis Jane
Invisibility John
Super Strength Max
Let's create another sample file with a different delimiter to test our script's flexibility:
echo -e "Apple,Red,Fruit\nCarrot,Orange,Vegetable\nBlueberry,Blue,Fruit" > ~/project/foods.txt
Now use our script with this new file and a comma as the delimiter:
~/project/columnize.sh ~/project/foods.txt ,
You should see output like this:
Apple Red Fruit
Carrot Orange Vegetable
Blueberry Blue Fruit
Our script has successfully columnized the data in both files, using different delimiters. This demonstrates the flexibility and power of combining shell scripting with the column utility.
Working with Different File Formats
In this step, we will explore how to use the column command with various file formats and delimiters. This will help you understand the versatility of the column utility and how it can be applied to different types of data.
Working with CSV Files
CSV (Comma-Separated Values) files are a common format for storing tabular data. Let's create a more complex CSV file and use the column command to format it.
First, create a new CSV file:
cd ~/project
echo -e "Name,Age,Occupation,City\nAlex,28,Engineer,Boston\nSamantha,35,Teacher,Chicago\nMohamed,42,Doctor,New York\nLin,31,Artist,San Francisco" > employees.csv
Let's examine the content of this file:
cat employees.csv
You should see:
Name,Age,Occupation,City
Alex,28,Engineer,Boston
Samantha,35,Teacher,Chicago
Mohamed,42,Doctor,New York
Lin,31,Artist,San Francisco
Now, let's use the column command to format this CSV file:
column -t -s ',' employees.csv
The output should look like this:
Name Age Occupation City
Alex 28 Engineer Boston
Samantha 35 Teacher Chicago
Mohamed 42 Doctor New York
Lin 31 Artist San Francisco
Notice how the column command has neatly arranged the data in aligned columns, making it much easier to read.
Working with TSV Files
TSV (Tab-Separated Values) is another common format for tabular data. Let's create a TSV file and format it using the column command.
Create a TSV file:
echo -e "Product\tPrice\tCategory\nLaptop\t999.99\tElectronics\nBook\t12.50\tMedia\nChair\t149.50\tFurniture" > products.tsv
Let's look at the content:
cat products.tsv
You should see:
Product Price Category
Laptop 999.99 Electronics
Book 12.50 Media
Chair 149.50 Furniture
Now, format it using the column command. Since tabs are the default delimiter for the column command, we don't need to specify a delimiter:
column -t products.tsv
The output should look like:
Product Price Category
Laptop 999.99 Electronics
Book 12.50 Media
Chair 149.50 Furniture
Using Our Script with Different Files
Now, let's use our columnize.sh script with these different files:
For the CSV file:
~/project/columnize.sh employees.csv ,
For the TSV file:
~/project/columnize.sh products.tsv $'\t'
Note: In the second command, we're using $'\t' to represent a tab character. This is a special syntax in bash that allows us to include special characters like tabs.
Both commands should produce nicely formatted output, demonstrating the flexibility of our script with different file formats and delimiters.
This step has shown how the column command and our script can be used to format various types of tabular data, making them more readable and easier to analyze.
Summary
In this lab, you have learned how to use the column command to organize and display data in a tabular format, making it easier to read and analyze. Here's a summary of what you've accomplished:
You learned the basic usage of the
columncommand with the-tand-soptions to format delimited text files.You created a shell script (
columnize.sh) that makes it easy to apply column formatting to any file with any delimiter.You applied these techniques to different file formats (CSV and TSV), demonstrating the flexibility of the
columnutility for various data types.
These skills are valuable for data processing and analysis in a Linux environment. The ability to quickly format and visualize text data is a powerful tool for system administrators, data analysts, and anyone who works with text files in the command line.
The techniques you've learned can be applied to:
- Log file analysis
- Configuration file management
- Data extraction and transformation
- Quick visualization of structured data
By mastering the column command and learning how to automate its usage with shell scripts, you've added an important tool to your Linux command-line toolkit.



