Awk command in Linux allows you to work with text in numerous ways. It is powerful especially if your text is organized as columns or uses some kind of delimiters. Sometimes you may need to extract the last field from text file or command output. You can use the awk command to easily get the last field in Linux. Here are the steps to delete last field in Linux.
How to Delete Last Field in Linux
By default, awk command uses whitespace characters as delimiters in text file or command output. We will look at different use cases to delete the last field in Linux.
1. Delete Last Field in Command Output
Let us say you have the following output for ls command.
$ ls -l -rw-r--r-- 1 ubuntu ubuntu 200M Apr 27 22:04 file1.txt -rw-r--r-- 1 ubuntu ubuntu 400M Apr 27 22:04 file2.txt -rw-r--r-- 1 ubuntu ubuntu 500M Apr 27 22:04 file3.txt -rw-r--r-- 1 ubuntu ubuntu 600M Apr 27 22:04 file4.txt -rw-r--r-- 1 ubuntu ubuntu 700M Apr 27 22:04 file5.txt
Here is the command to get last field in the above command output. We basically pipe it to awk command and use $NF awk variable to get the last field. $NF stores the last column by default, in awk.
$ ls -l | awk '{print $NF}' file1.txt file2.txt file3.txt file4.txt file5.txt
Here is the command to delete last column of ls -l command’s output. In this case, we specify awk command to output all fields where NF contains the number of fields in the input. We subtract 1 from it, to prevent the last field from being counted & printed. The 1 at the end evaluates to true and triggers the default awk behavior of printing $0 that is printing the entire record except the last field.
$ ls -l | awk 'NF{NF-=1};1' or $ ls -l | awk 'NF{NF--};1' or $ ls -l | awk 'NF{--NF};1' -rw-r--r-- 1 ubuntu ubuntu 200M Apr 27 22:04 -rw-r--r-- 1 ubuntu ubuntu 400M Apr 27 22:04 -rw-r--r-- 1 ubuntu ubuntu 500M Apr 27 22:04 -rw-r--r-- 1 ubuntu ubuntu 600M Apr 27 22:04 -rw-r--r-- 1 ubuntu ubuntu 700M Apr 27 22:04
2. Delete Last Column in File Input
You can also delete last column from a file, instead of a command output. Let us say you have a file data.txt which has the output of above ls -l command
$ cat data.txt -rw-r--r-- 1 ubuntu ubuntu 200M Apr 27 22:04 file1.txt -rw-r--r-- 1 ubuntu ubuntu 400M Apr 27 22:04 file2.txt -rw-r--r-- 1 ubuntu ubuntu 500M Apr 27 22:04 file3.txt -rw-r--r-- 1 ubuntu ubuntu 600M Apr 27 22:04 file4.txt -rw-r--r-- 1 ubuntu ubuntu 700M Apr 27 22:04 file5.txt
Here is the command to get the last field from this file in Linux, using awk command. In this case, we specify the input filename at the end of awk command.
$ awk '{print $NF}' data.txt file1.txt file2.txt file3.txt file4.txt file5.txt
Here is the command to delete last field from file in Linux, using awk command.
$ awk 'NF{NF-=1};1' data.txt or $ awk 'NF{NF--};1' data.txt or $ awk 'NF{--NF};1' data.txt -rw-r--r-- 1 ubuntu ubuntu 200M Apr 27 22:04 -rw-r--r-- 1 ubuntu ubuntu 400M Apr 27 22:04 -rw-r--r-- 1 ubuntu ubuntu 500M Apr 27 22:04 -rw-r--r-- 1 ubuntu ubuntu 600M Apr 27 22:04 -rw-r--r-- 1 ubuntu ubuntu 700M Apr 27 22:04
3. Delete Last Field with Different Delimiter
As mentioned earlier, the default delimiter used by awk is whitespace. If your file or command output contains different delimiter, you can specify it using -F option. Let us say your file has the following contents.
$ cat data.txt /home/parent/child1/child2/child3/file1.txt /home/parent/child1/child2/file2.txt /home/parent/child1/file3.txt
In the above case, the delimiter is forward slash. In such cases, you can use the following command to get the last field.
$ awk -F '/' '{print $NF}' data.txt file1.txt file2.txt file3.txt
You can use the following command to delete last field from input.
$ awk -F '/' 'NF{NF-=1};1' data.txt or $ awk -F '/' 'NF{NF--};1' data.txt or $ awk -F '/' 'NF{--NF};1' data.txt file1.txt file2.txt file3.txt
In this article, we have learnt how to delete the last field in Linux.
Also read:
How to Harden Apache Server in CentOS
How to Display Specific Columns in Linux
How to List Active Connections in PostgreSQL
How to Create Swap Space in Ubuntu/Debian
How to Fix ‘mv: argument list too long’
Related posts:
Sreeram has more than 10 years of experience in web development, Python, Linux, SQL and database programming.