¿No obtienes el resultado deseado con el comando de corte?

¿No obtienes el resultado deseado con el comando de corte?
[root@localhost ~]#  ps aux | grep ata
root        19  0.0  0.0      0     0 ?        S    07:52   0:00 [ata/0]
root        20  0.0  0.0      0     0 ?        S    07:52   0:00 [ata_aux]
root      1655  0.0  2.6  22144 13556 tty1     Ss+  07:53   0:18 /usr/bin/Xorg :0 -nr -verbose -auth /var/run/gdm/auth-for-gdm-t1gMCU/database -nolisten tcp vt1
root      3180  0.0  0.1   4312   728 pts/0    S+   14:09   0:00 grep ata
[root@localhost ~]#  ps aux | grep ata | cut -d" " -f 2

[root@localhost ~]#

Esperaría una segunda columna en el resultado; pero sin conseguir nada. Algunas ideas ?

Respuesta1

Con -d " ", el separador de campo es un (y sólo uno) carácter de espacio. Al contrario de la división de palabras del shell, cutno trata el espacio de manera diferente a cualquier otro carácter. Entonces cut -d " " -f2regresa ""in root   19, tal como regresaría ""for cut -d: -f2in root:::19.

Necesitarías apretar los espacios en blanco para transformar cualquier secuencia de espacio enunoespacio:

ps aux | grep ata | tr -s ' ' | cut -d ' ' -f2

O use awkdonde en su modo de escupir predeterminado, no usa un separador sino que se divide en la lista de secuencias de caracteres que no están en blanco:

ps aux | awk '/ata/{print $2}'

Sin embargo, en este caso, es posible que desee utilizar:

pgrep -f ata

O al menos:

ps -eo pid= -o args= | awk '/ata/{print $1}'

Para comparar únicamente con los argumentos.

Respuesta2

Usar:

ps aux | awk '/ata/{print $2}'

El cutcomando que está utilizando no proporciona el resultado deseado ya que hay más de un espacio entre columnas.

información relacionada