是否有任何方法可以使用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的第三个字段。

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

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

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

我仍然喜欢Perl处理空格字段的方式。 第一个字段是$F[0]。

$ ps axu | grep dbus | perl -lane 'print $F[4]'

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

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

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

Awk版本可能是最好的方法,但如果你首先用tr压缩重复,你也可以使用cut:

ps axu | grep jbos[s] | tr -s ' ' | cut -d' ' -f5
#        ^^^^^^^^^^^^   ^^^^^^^^^   ^^^^^^^^^^^^^
#              |            |             |
#              |            |       get 5th field
#              |            |
#              |        squeeze spaces
#              |
#        avoid grep itself to appear in the list