Linux cut Command: Text Cutting

LinuxLinuxBeginner
Practice Now

Introduction

In this lab, you will learn how to use the cut command in Linux to extract and analyze data from text files. We'll simulate a scenario where you're working at a local bookstore and need to process customer and book information. The cut command will help you extract specific columns or fields from your data files, enabling efficient data management and analysis.

Prerequisites

Before starting this lab, ensure you have:

  • Basic familiarity with the Linux command line
  • Access to a Linux terminal (this lab assumes you're using a terminal in the /home/labex/project directory)

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("`Linux`")) -.-> linux/BasicFileOperationsGroup(["`Basic File Operations`"]) linux/BasicFileOperationsGroup -.-> linux/cut("`Text Cutting`") subgraph Lab Skills linux/cut -.-> lab-219187{{"`Linux cut Command: Text Cutting`"}} end

Understanding the Bookstore Data

Let's begin by examining the bookstore data files. We have two files: customers.txt and books.txt.

First, let's view the contents of the customers.txt file:

cat /home/labex/project/customers.txt

You should see output similar to this:

ID,Name,Age,Email
1,John Doe,25,[email protected]
2,Jane Smith,35,[email protected]
3,Lily Chen,30,[email protected]
4,Andy Brown,22,[email protected]

Now, let's look at the books.txt file:

cat /home/labex/project/books.txt

The output should resemble:

ISBN,Title,Author,Price
978-1234567890,The Great Adventure,Alice Writer,19.99
978-2345678901,Mystery in the Woods,Bob Author,24.99
978-3456789012,Cooking Basics,Carol Chef,15.99
978-4567890123,Science Explained,David Scientist,29.99

These files contain comma-separated values (CSV) with different fields for customers and books.

If you don't see the expected output or encounter an error, check the following:

  • Ensure you're in the correct directory (/home/labex/project)
  • Verify that the files exist by running ls -l
  • If the files are missing, you may need to create them manually or contact your lab administrator

Extracting Customer Names

Now that we've seen our data, let's use the cut command to extract specific information. We'll start by extracting customer names from the customers.txt file.

The cut command uses the -d option to specify a delimiter (in our case, a comma) and the -f option to select which field(s) to display.

Run the following command:

cut -d ',' -f 2 /home/labex/project/customers.txt

Let's break down this command:

  • cut: The name of the command we're using
  • -d ',': Specifies that we're using a comma as the delimiter between fields
  • -f 2: Tells cut to extract the second field
  • /home/labex/project/customers.txt: The path to our input file

You should see output like this:

Name
John Doe
Jane Smith
Lily Chen
Andy Brown

Notice that the header "Name" is also included. This is because cut treats the header line just like any other line in the file.

If you want to exclude the header, you can use the tail command in combination with cut:

cut -d ',' -f 2 /home/labex/project/customers.txt | tail -n +2

This pipeline does two things:

  1. cut extracts the second field (names) from each line
  2. tail -n +2 outputs starting from the second line, effectively skipping the header

The output should now be:

John Doe
Jane Smith
Lily Chen
Andy Brown

If you're not seeing the expected output:

  • Double-check that you've typed the command exactly as shown
  • Ensure that the customers.txt file hasn't been modified
  • Try running cat /home/labex/project/customers.txt again to verify the file contents

Extracting Multiple Fields

Often, we need to extract multiple fields from our data. Let's extract both the customer names and ages from the customers.txt file.

Use the following command:

cut -d ',' -f 2,3 /home/labex/project/customers.txt

This command is similar to the previous one, but now we're specifying two fields in the -f option:

  • -f 2,3: Extract the second and third fields (name and age)

Your output should look like this:

Name,Age
John Doe,25
Jane Smith,35
Lily Chen,30
Andy Brown,22

As you can see, we can specify multiple fields by separating them with commas in the -f option. The output maintains the original delimiter (comma) between the extracted fields.

If your output doesn't match:

  • Ensure you've included the comma between 2 and 3 in the -f option
  • Check that the customers.txt file hasn't been altered
  • Try running the command without the -d ',' option to see if the file uses a different delimiter

Extracting a Range of Fields

The cut command also allows us to extract a range of fields. Let's extract all fields from the customer ID to the age (fields 1-3) from the customers.txt file.

Use this command:

cut -d ',' -f 1-3 /home/labex/project/customers.txt

Here's what's new in this command:

  • -f 1-3: This specifies a range of fields from 1 to 3, inclusive

Your output should resemble:

ID,Name,Age
1,John Doe,25
2,Jane Smith,35
3,Lily Chen,30
4,Andy Brown,22

This command extracts a range of fields from 1 to 3. You can also combine ranges and individual fields, like -f 1-3,5 to extract fields 1, 2, 3, and 5.

If you're not seeing the expected output:

  • Verify that you've used a hyphen (-) between 1 and 3 in the -f option
  • Ensure the customers.txt file hasn't been modified
  • Try extracting each field individually (e.g., -f 1, -f 2, -f 3) to check if all fields are present in the file

Working with Fixed-Width Fields

Sometimes, data isn't separated by delimiters but is instead arranged in fixed-width columns. The cut command can handle this too, using the -c option to specify character positions.

Let's create a new file with fixed-width data:

cat << EOF > /home/labex/project/inventory.txt
ISBN     Title          Quantity
1234567890The Great Adv      100
2345678901Mystery in th       75
3456789012Cooking Basi       50
4567890123Science Exp        125
EOF

This command uses a here-document (<<EOF) to create a new file named inventory.txt with fixed-width data.

Now, let's extract just the book titles using character positions:

cut -c 11-25 /home/labex/project/inventory.txt

Here's what's new:

  • -c 11-25: This tells cut to extract characters 11 through 25 from each line

You should see:

Title
The Great Adv
Mystery in th
Cooking Basi
Science Exp

This command extracts characters 11 through 25 from each line, which corresponds to the title field in our fixed-width data.

If you're not getting the expected output:

  • Ensure the inventory.txt file was created correctly (you can check with cat /home/labex/project/inventory.txt)
  • Verify that you've used the correct character range (11-25)
  • Try adjusting the character range if the titles seem misaligned

Combining cut with Other Commands

The cut command becomes even more powerful when combined with other Linux commands. Let's use cut along with grep to find all books priced over $20 and display their titles.

Run this command:

grep -E ',[2-9][0-9]\.[0-9]{2}$' /home/labex/project/books.txt | cut -d ',' -f 2

This command pipeline does two things:

  1. grep -E ',[2-9][0-9]\.[0-9]{2}$': This uses a regular expression to find lines where the price is $20 or more
    • ,[2-9][0-9]\.[0-9]{2}$: Matches a comma, followed by a number from 20 to 99, a decimal point, and two more digits at the end of the line
  2. cut -d ',' -f 2: This extracts just the book title (second field) from the lines that grep found

You should see output similar to:

Mystery in the Woods
Science Explained

If you're not seeing the expected output:

  • Verify that the books.txt file contains the correct data
  • Check that you've entered the grep regular expression correctly
  • Try running the grep command alone to see which lines it's selecting
  • Ensure that the cut command is correctly specifying the second field

Summary

In this lab, you've learned how to use the cut command in Linux to extract specific data from text files. You've practiced:

  • Extracting single fields from CSV files
  • Extracting multiple fields and ranges of fields
  • Working with fixed-width data
  • Combining cut with other commands like grep

These skills are invaluable for data processing and analysis in various scenarios, from managing bookstore inventory to handling any kind of structured text data.

Additional cut command parameters not covered in this lab:

  • -s: Suppress lines not containing delimiters
  • --output-delimiter=STRING: Use STRING as the output delimiter
  • --complement: Complement the set of selected bytes, characters or fields

To further your learning, try experimenting with these additional parameters and create your own data files to practice on. Remember, the man cut command provides a comprehensive manual for the cut command if you need more information.

Resources

Other Linux Tutorials you may like