Can I change the order of the output fields from the Linux cut command?
Solution 1
From man cut
:
Selected input is written in the same order that it is read, and is written exactly once.
Use awk '{print $5,$6,$7,$8,$3,$4,$1}'
instead of cut
.
Solution 2
cut
does not reorder its output. It simply collects a list of which columns to print, then prints them out as they arrive.
Use a different tool such as Awk to reorder output columns.
However, in this patricular case, try with stat
or find
instead of ls
. It is generally not recommended to try to parse the output from ls
. See http://mywiki.wooledge.org/ParsingLs
Solution 3
As others have mentioned, don't parse ls. If you want file information, use stat
stat -c "%s %y %U %G %A %n" filename
You may need to do some extra work to get the timestamp formatted as you want.
$ ls -l data
-rw-r--r-- 1 glennj glennj 13 2013-01-01 11:19 data
$ LC_TIME=POSIX ls -l data
-rw-r--r-- 1 glennj glennj 13 Jan 1 11:19 data
$ stat -c "%s %y %U %G %A %n" data
13 2013-01-01 11:19:53.670015242 -0500 glennj glennj -rw-r--r-- data
$ stat -c "%s %Y %U %G %A %n" data | awk '{$2 = strftime("%b %e %H:%M", $2)} 1'
13 Jan 1 11:19 glennj glennj -rw-r--r-- data
Alexis Cimpu
Updated on July 21, 2022Comments
-
Alexis Cimpu over 1 year
I am using cut command in command line and seems I can't get the output I like. Do you have any idea why I am getting this? Is it something that I do wrong?
This is the normal output and I would like to output in different order:
[root@upbvm500 root]# ls -al IDS_DIR/a | tr -s " " -rw-r--r-- 1 root root 0 Jan 1 17:18 IDS_DIR/a [root@upbvm500 root]# [root@upbvm500 root]# ls -al IDS_DIR/a | tr -s " " | cut -d" " -f5,6,7,8,3,4,1 -rw-r--r-- root root 0 Jan 1 17:18
But as you can see, this is not working like expected. Any idea why they are switching places?
-
Mats Petersson almost 11 yearsOf course that won't work if some filename has one or more space(s) in it...
-
Chris Seymour almost 11 years@MatsPetersson yes, good point but neither would
cut
!