How to print all the columns after a particular number using awk?

后端 未结 11 645
一生所求
一生所求 2020-12-22 20:23

On shell, I pipe to awk when I need a particular column.

This prints column 9, for example:

... | awk \'{print $9}\'

How can I tell

相关标签:
11条回答
  • 2020-12-22 21:15
    awk -v m="\x01" -v N="3" '{$N=m$N ;print substr($0, index($0,m)+1)}'
    

    This chops what is before the given field nr., N, and prints all the rest of the line, including field nr.N and maintaining the original spacing (it does not reformat). It doesn't mater if the string of the field appears also somewhere else in the line, which is the problem with Ascherer's answer.

    Define a function:

    fromField () { 
    awk -v m="\x01" -v N="$1" '{$N=m$N; print substr($0,index($0,m)+1)}'
    }
    

    And use it like this:

    $ echo "  bat   bi       iru   lau bost   " | fromField 3
    iru   lau bost   
    $ echo "  bat   bi       iru   lau bost   " | fromField 2
    bi       iru   lau bost   
    

    Output maintains everything, including trailing spaces For N=0 it returns the whole line, as is, and for n>NF the empty string

    0 讨论(0)
  • 2020-12-22 21:15

    Using cut instead of awk and overcoming issues with figuring out which column to start at by using the -c character cut command.

    Here I am saying, give me all but the first 49 characters of the output.

     ls -l /some/path/*/* | cut -c 50-
    

    The /*/*/ at the end of the ls command is saying show me what is in subdirectories too.

    You can also pull out certain ranges of characters ala (from the cut man page). E.g., show the names and login times of the currently logged in users:

           who | cut -c 1-16,26-38
    
    0 讨论(0)
  • 2020-12-22 21:16
    ruby -lane 'print $F[3..-1].join(" ")' file
    
    0 讨论(0)
  • 2020-12-22 21:21

    When you want to do a range of fields, awk doesn't really have a straight forward way to do this. I would recommend cut instead:

    cut -d' ' -f 9- ./infile
    

    Edit

    Added space field delimiter due to default being a tab. Thanks to Glenn for pointing this out

    0 讨论(0)
  • 2020-12-22 21:23

    Here is an example of ls -l output:

    -rwxr-----@ 1 ricky.john  1493847943   5610048 Apr 16 14:09 00-Welcome.mp4
    -rwxr-----@ 1 ricky.john  1493847943  27862521 Apr 16 14:09 01-Hello World.mp4
    -rwxr-----@ 1 ricky.john  1493847943  21262056 Apr 16 14:09 02-Typical Go Directory Structure.mp4
    -rwxr-----@ 1 ricky.john  1493847943  10627144 Apr 16 14:09 03-Where to Get Help.mp4
    

    My solution to print anything post $9 is awk '{print substr($0, 61, 50)}'

    0 讨论(0)
提交回复
热议问题