是否有任何方法可以使用cut命令为更多的空格指定字段分隔符?(比如“”+)? 例如:在下面的字符串中,我想达到值'3744',我应该说什么字段分隔符?

$ps axu | grep jboss

jboss     2574  0.0  0.0   3744  1092 ?        S    Aug17   0:00 /bin/sh /usr/java/jboss/bin/run.sh -c example.com -b 0.0.0.0

cut -d' '不是我想要的,因为它只用于一个单独的空格。 awk也不是我想要的,但是如何处理'cut'?

谢谢。


当前回答

更短/更简单的解决方案:使用切割(我写的是类固醇切割)

ps axu | grep '[j]boss' | cuts 4

请注意,cuts字段索引是从零开始的,因此第5个字段被指定为4

http://arielf.github.io/cuts/

更简短的(完全不使用cut)是:

pgrep jboss

其他回答

我将提名tr -s[:空白:]作为最佳答案。

为什么我们要用cut?它有一个神奇的命令,说“我们想要第三个字段和它之后的每个字段,省略前两个字段”

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

我不相信有一个等价的命令awk或perl分裂,我们不知道会有多少字段,即通过字段X的第三个字段。

对此,我喜欢使用tr -s命令

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

这将所有空白压缩到1个空格。这种方式告诉cut使用一个空格作为分隔符,正如预期的那样。

更短/更简单的解决方案:使用切割(我写的是类固醇切割)

ps axu | grep '[j]boss' | cuts 4

请注意,cuts字段索引是从零开始的,因此第5个字段被指定为4

http://arielf.github.io/cuts/

更简短的(完全不使用cut)是:

pgrep jboss

如果你必须使用cut命令,另一种方法

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

在Solaris下,将awk替换为nawk或/usr/xpg4/bin/awk

作为替代,总是有perl:

ps aux | perl -lane 'print $F[3]'

或者,如果你想要从字段#3开始的所有字段(如上面的答案之一所述):

ps aux | perl -lane 'print @F[3 .. scalar @F]'