Table of Contents
BASH - Commands - cut - Cut using Fields
The cut command allows users to cut sections of a text very easily.
For this, we need to use both the d and the f flag of cut.
The d flag stands for delimiters and f for fields.
Delimiters are special characters that separate section of a text from others.
Common examples include ‘-‘, ‘:’, and ” ” (space).
Cut the First Section of Input Stream
echo "Let's cut this input stream section by section" | cut -d ' ' -f 1
The above cut command will cut the first section of text (“Let’s” in this case) from the input stream.
Note that the value to the delimiter flag -d is a single space.
Cut the First Section of a File
cut -d ':' -f 1 test.txt
Returns the first columns of each row inside the file.
The value provided to the delimiter flag was a colon because that’s how our file separates the columns.
Cut Specific Sections of the Input Stream
echo "Let's cut this input stream section by section" | cut -d ' ' -f 1,2,3
Displays only the first three field of the given input string.
It is done using a comma-separated array of field positions.
The output of this command will be ‘Let’s cut this‘.
Cut Specific Sections of a File
cut -d ':' -f 1,2,3 test.txt
This command will also provide the same sort of output as the previous command.
Cut Range of Fields from the Input Stream
echo "Let's cut this input stream section by section" | cut -d ' ' -f 1-5
Cuts the first five fields of the string and displays it in the terminal.
The apostrophes are required when space is used as the delimiter between multiple fields.
Cut Range of Fields from a File
cut -d ':' -f 1-3 test.txt
Cuts each of the first three columns of our text file and show it as the output.
The apostrophes aren’t mandatory for characters like – or :.
Cut Each Entry from a Specific Field and List them Alphabetically
cut -d ':' -f 1 test.txt | awk '{print $1}' | sort
List the result alphabetically sorted.
Cut Each Entry from a Field and List them in Alphabetically Reverse Order
cut -d ':' -f 1 test.txt | awk '{print $1}' | sort -r
Sorts the entries in a reverse manner.
Cut from a Fixed Field to the End of the Input Stream
echo "Let's cut this input stream section by section" | cut -d ' ' -f 2-
This cut command will cut starting from the second field to the end of the string.
It can be beneficial when you need to cut from a specified position until the end of the input.
You can change the value of -f while keeping the trailing – on for cutting from different fields.
Cut from a Fixed Field to the End of a File
cut -d ':' -f 2- test.txt
Start cutting from the specified field and go till the end of each line.
Cut a Specified Number of Columns Starting from the First One
echo "Let's cut this input stream section by section" | cut -d ' ' -f -5
Cuts the first five fields of the given input.
You need to add the preceding hyphen(-) else the output will not match your expectation.
Cut Some Specified Columns of a File Starting from the First One
cut -d ':' -f -2 test.txt
This will start cutting the file file test.txt from the first column and terminate after it has finished cutting the second command.
Cut Multiple Fields of CSV Files
cut -d ',' -f 1,2 file.csv
The cut command will often prove to be a viable tool when you’re working with massive CSV documents.
The above command, for example, will cut the first two columns of a comma-separated CSV file called file.csv.
Cut Specific Fields of CSV Files and Sort them in Reverse Order
cut -d ',' -f 1,3,5 file.csv | sort -r
The above command will cut the first, third, and fifth columns of a comma-separated CSV file named file.csv and display the output in the reverse order.
* * * *
Field Cuts
Cut fields from a string, using a delimiter
cut -f 2- -d ':' 23:34:45:56
NOTE: -d specifies delimiter
returns:
34:45:56
Cut fields from a string, without specifying a delimiter
cut -f 2 er rt fg wd ji
returns:
er rt fg wd ji
NOTE: cut didn't find the delimiter (default is tab) so returns whole line.
Cut fields from a string, without specifying a delimiter; and prevent printing when delimiter not found
cut -f 2 -s er rt fg wd ji
NOTE: cut wont print as -s flag is used to prevent printing when delimiter not found.
Cut fields from a file, using a delimiter
cut -d: -f1 /etc/passwd >users.txt