
[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, cut
no trata el espacio de manera diferente a cualquier otro carácter. Entonces cut -d " " -f2
regresa ""
in root 19
, tal como regresaría ""
for cut -d: -f2
in 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 awk
donde 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 cut
comando que está utilizando no proporciona el resultado deseado ya que hay más de un espacio entre columnas.