[l-linux] seis caracteres

Ernesto Hernandez-Novich emhn at telcel.net.ve
Wed Oct 16 08:41:35 CDT 2002


On Wed, 16 Oct 2002, Paco Martinez wrote:
> Me gustaria obtener el numero de pid de un proceso haciendo algo asi como
>
> ps -ax | grep mysql | cut -f1 -d
>
> y me salen solo los procesos que NO empiezan por espacio en blanco -10032
> si, 4569 no-

Claro, porque estás utilizando el -f1 (primer campo), delimitado por
espacios en blanco (-d' ', supongo). Si aparece un espacio en blanco, el
primer campo es vacío. Supongamos que _ representa un espacio en blanco.

asdkfjasd_dflksjd
(Campo 1) (Campo 2)

__dlkfjsdf
  (Campo 3)

Tienes campos 1 y 2 _vacíos_ porque antes del primer espacio en blanco
no hay nada, y entre el primer espacio en blanco y el segundo tampoco
hay nada.

> ?hay alguna maneta de obtener el pid que voy buscado?

Varias.

> ? o lo que es lo mismo como obtener los seis primeros caracteres de una
> linea al hacer ps -ax?

Si insistes en usar cut, deberías utilizar _caracteres_, precisamente
sabiendo que ps utiliza posiciones fijas. Para eso lees completo el
manual de cut (curioso, porque la opción -c viene antes que la opción
-d en man cut).

ps ax | grep mysql | cut -c1-5

y eso va a conservar los espacios en blanco desde el principio.

También puedes usar awk

ps ax | awk '/mysql/ { print $1 }'

Perl como complemento

ps ax | perl -lane 'print $F[0] if /mysql/'

o perl autocontenido utilizando el módulo Proc::ProcessTable

#!/usr/bin/perl -w
use ProcessTable;
$t = new Proc::ProcessTable;
print join(" ",map { $_->pid }
               grep { $_->cmndline =~ /mysql/ } @{$t->table}),"\n";

El módulo Proc::ProcessTable permite que en $t esté toda la tabla de
procesos _completa_, y cada vez que se lee (con $t->table) se tome el
estado actual de la tabla de procesos [1] y se obtenga en forma de
lista. Luego uno busca lo que le interesa y opera, en este caso, los
procesos cuya línea de comando contenga /mysql/, para luego obtener
una lista de los PID, en este caso solamente las imprimo (por eso
el print join), pero podría usarla para cualquier otra cosa.

El módulo Proc::ProcessTable está en CPAN y se instala por los
mecanismos habituales, a menos que uno use Debian en cuyo caso basta un

apt-get install libproc-process-perl

[1] Es _independiente_ del sistema operativo, recordando que Perl
    funciona en Unix, Windows, MacIntosh, VMS... siempre muestra
    lo que está disponible en el sistema.
-- 
Ernesto Hernández-Novich - Running Linux 2.4.19 i686 - Unix: Live free or die!
Geek by nature, Linux by choice, Debian of course.
If you can't apt-get it, it isn't useful or doesn't exist.
GPG Key Fingerprint = 438C 49A2 A8C7 E7D7 1500 C507 96D6 A3D6 2F4C 85E3

------------------------------------------------------------------------
Enviar e-mail a <majordomo at pm.org> colocando en el cuerpo:
"UNSUBSCRIBE caracas-pm-list" para desuscribirse.
"INFO caracas-pm-list" para conocer las reglas de etiqueta.
------------------------------------------------------------------------



More information about the caracas-pm mailing list