[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