是否有任何方法可以使用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'?

谢谢。


当前回答

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

其他回答

就我个人而言,我倾向于将awk用于这样的工作。例如:

ps axu| grep jboss | grep -v grep | awk '{print $5}'

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

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

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

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的第三个字段。

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