Can I change the order of the output fields from the Linux cut command?

13,118

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
Share:
13,118
Alexis Cimpu
Author by

Alexis Cimpu

Updated on July 21, 2022

Comments

  • Alexis Cimpu
    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
    Mats Petersson almost 11 years
    Of course that won't work if some filename has one or more space(s) in it...
  • Chris Seymour
    Chris Seymour almost 11 years
    @MatsPetersson yes, good point but neither would cut!