====== 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