• Publicidad

Concatenar un awk

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

Concatenar un awk

Notapor javierg » 2007-04-13 02:30 @146

Muy buenas. ¿Alguien ve algún error en la siguiente búsqueda? Cuando lo ejecuto en Solaris va OK, pero sin embargo cuando lo lanzo como parte de un script de Perl, me da valores que no son los correctos

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
$Cadena=`ls -l /var/ldap | grep cert7.db | awk ´{ print $1}´`;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

es curioso, cuando lo lanzo fuera en el Solaris, tengo como respuesta
Código: Seleccionar todo
-r--r--r--
que es lo correcto
y cuando lo lanzo desde Perl
Código: Seleccionar todo
-r--r--r--  1 root other 32768 Jul 6 2006 cert7.db


en resumen, solo necesito el primer campo
¿No se puede utilizar el awk con Perl?
javierg
Perlero nuevo
Perlero nuevo
 
Mensajes: 48
Registrado: 2006-10-17 05:26 @268

Publicidad

Notapor explorer » 2007-04-13 03:25 @184

El problema es que Perl 'interpola' $1 pensando que es una variable suya, cuando en realidad sabemos que es una variable que se debe pasar al shell para que lo interprete awk.

Una solución es hacer que se ejecute el comando awk de una forma un poco 'artificiosa':
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$x = '$1';
$Cadena = qx(ls -l /var/ldap | grep cert7.db | awk '{ print $x}');
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Pero la verdadera solución, como siempre, es escapar el símbolo conflictivo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$Cadena = qx(ls -l /var/ldap | grep cert7.db | awk '{ print \$1}');
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Pero... ¿para qué tanto jaleo si es mucho mejor hacerlo todo con el propio Perl?
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$Cadena = (split " ", (grep { /cert7\.db/ } qx(ls -l))[0])[0];
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Te ahorras la ejecución de dos programas (grep y awk).

De hecho, este problema ya está resuelto en un hilo anterior.

Hay que usar el sistema de búsqueda, javierg.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Avanzado

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 9 invitados

cron