How to specify more spaces for the delimiter using cut?

前端 未结 12 596
遥遥无期
遥遥无期 2020-12-04 05:51

Is there any way to specify a field delimiter for more spaces with the cut command? (like \" \"+) ? For example: In the following string, I like to reach value \'3744\', wha

相关标签:
12条回答
  • 2020-12-04 06:06

    I still like the way Perl handles fields with white space.
    First field is $F[0].

    $ ps axu | grep dbus | perl -lane 'print $F[4]'
    
    0 讨论(0)
  • 2020-12-04 06:09

    I am going to nominate tr -s [:blank:] as the best answer.

    Why do we want to use cut? It has the magic command that says "we want the third field and every field after it, omitting the first two fields"

    cat log | tr -s [:blank:] |cut -d' ' -f 3- 
    

    I do not believe there is an equivalent command for awk or perl split where we do not know how many fields there will be, ie out put the 3rd field through field X.

    0 讨论(0)
  • 2020-12-04 06:10

    awk version is probably the best way to go, but you can also use cut if you firstly squeeze the repeats with tr:

    ps axu | grep jbos[s] | tr -s ' ' | cut -d' ' -f5
    #        ^^^^^^^^^^^^   ^^^^^^^^^   ^^^^^^^^^^^^^
    #              |            |             |
    #              |            |       get 5th field
    #              |            |
    #              |        squeeze spaces
    #              |
    #        avoid grep itself to appear in the list
    
    0 讨论(0)
  • 2020-12-04 06:10

    If you want to pick columns from a ps output, any reason to not use -o?

    e.g.

    ps ax -o pid,vsz
    ps ax -o pid,cmd
    

    Minimum column width allocated, no padding, only single space field separator.

    ps ax --no-headers -o pid:1,vsz:1,cmd
    
    3443 24600 -bash
    8419 0 [xfsalloc]
    8420 0 [xfs_mru_cache]
    8602 489316 /usr/sbin/apache2 -k start
    12821 497240 /usr/sbin/apache2 -k start
    12824 497132 /usr/sbin/apache2 -k start
    

    Pid and vsz given 10 char width, 1 space field separator.

    ps ax --no-headers -o pid:10,vsz:10,cmd
    
      3443      24600 -bash
      8419          0 [xfsalloc]
      8420          0 [xfs_mru_cache]
      8602     489316 /usr/sbin/apache2 -k start
     12821     497240 /usr/sbin/apache2 -k start
     12824     497132 /usr/sbin/apache2 -k start
    

    Used in a script:-

    oldpid=12824
    echo "PID: ${oldpid}"
    echo "Command: $(ps -ho cmd ${oldpid})"
    
    0 讨论(0)
  • 2020-12-04 06:10

    Another way if you must use cut command

    ps axu | grep [j]boss |awk '$1=$1'|cut -d' ' -f5
    

    In Solaris, replace awk with nawk or /usr/xpg4/bin/awk

    0 讨论(0)
  • 2020-12-04 06:12

    I like to use the tr -s command for this

     ps aux | tr -s [:blank:] | cut -d' ' -f3
    

    This squeezes all white spaces down to 1 space. This way telling cut to use a space as a delimiter is honored as expected.

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