Oracle Live

08/10/2016

LINUX – Manual de Perl

Filed under: Sistemas — mogukiller @ 8:25 am
Tags: ,

Cuando hay que procesar ficheros de varios gigas el parseo con awk es demasiado lento. Por lo que otra opcion es utilizar Perl. Aqui os dejo una pequeña recopilacion de cosas utiles.

------------------------------------------
MENU
------------------------------------------
-- Arrays
-- Bucles
-- Estructuras de control
-- Expresiones
-- Ficheros
-- Hash
-- I / O
-- Strings
-- Variables


-- Variables

my $variable;
$variable = 1;

my $variable = 1;
($1,$2,$3) = (1,2,3);

$_	#Esta variable es donde se devuelve el valor por defecto en muchas funciones.

-- Expresiones regulares

-- FALSE =
- 0
- cadena vacia
- '0'
- undef (si la variable no esta definida)
- muchas funciones devuelven undef para indicar que ha fallado
- podemos forzar el undef de una variable
$x = undef;
-- TRUE =
- ' ' (con un espacio)
- 1
- true

-- nota: Culaquier cadena entre // se considera una expresion regular

/buena/	--> Busca la cadena buena
/b*/		--> Cualquier cadena que empiece por b
/b./		--> Cadena de dos letras que empiece por b
/[abcd]/	--> Cadena que contenga esas letras.
/[0-9]/	--> Rango de valores del 0-9
/[a-z0-9]/	--> Letras minusculas y numeros.
/[^a-b]/	--> Que la palabra no sea ni a ni b ni combinacion
/^a/		--> Que la cadena empiece por a
/b$/		--> Que la cadena termine en b
/a|b/		--> Que la palabra tenga a o b
/ab{2,}/	--> a seguido de al menos dos b
/ab+c/	--> a seguido de UNA o mas b y al menos una c
/ab?c/	--> 0 o una b
/\d{2}/	--> Cadenas de dos caracteres o mas
/\w+/		--> Cadenas alfanumericas y _ 



-- Strings

-- lc (minusculas) y uc (mayusculas)

my $valor = lc "Hola"; 

-- index 

$posicion = index $cadena1, 'capital'; # -1 Si no devuelve el valor
$posicion = index $cadena1, 'c', 3	   # 3er indica a partir de que caracter buscar.
 
-- reemplaza cadenas

s/Hola/Adios/;	#Para la variable $_ y solo para la primera ocurrencia.
s/Hola/Adios/g;	#Para todas las ocurrencias.
s/Hola/Adios/gi;	#Lo hace case insensitive

-- substr ( offset, count)

$cadena2 = substr ($cadena1, 13,5);

-- une elementos

$salida_join = join(",",@elementos);

-- trocea ficheros 

@elementos=split(/,/,$cadena);

-- Ficheros

-- Ejemplo: Cargamos un fichero entero.

my $file = 'data.txt';
my $data;
{    
open my $fh, '<', $file or die;
local $/ = undef;	# <--- Este es el truco.
$data = <$fh>;
close $fh;
}
print $data;

-- Estructuras de control

-- IF ELSE.

if ( $ready ) {$hungry++;}	# Sentencia IF en una linea

if ( $ready )
{
$hungry++;
}
else
{
$hungry--;
}

if ( $ready >10 )
{
$hungry += 2;
}
elsif ( $ready <2 )
{
$hungry++;
}
else
{
$hungry--;
}

-- Operadores relacionales
-- false:
- 0, "", undef;

Numeric    String         Meaning
==            eq           equal
!=            ne           not equal
<             lt           less than
>             gt           greater than
<=            le           less than or equal
>=            ge           greater then or equal

-- Bucles

-- for

for ( my $i = 1; $i > 10; $i++ )
{
print $i;
}

-- foreach

foreach my $element (0..10) 
{
print $element."\n"
}

-- while

while ( $ready > 10 )
{
print $ready;
$ready--;
}

-- do {} while / until

do
{
print $ready;
$ready--;
}while( $ready > 10 );



-- Arrays

-- Asignacion

@mi_array = (1,2,3);
@mi_array = @tu_array;

$a = @mi_array;		 #Obtiene la longitud del array.

$a = $mi_array[0];		 # Accede al primer elemento;
$mi_array[0] = 5;		 # Asigna valor al primer elemento.

-- Funciones

push( @mi_array, 4 );	# Añade un elemento al final.
pop (@mi_lista)		# Quita un elemento del final. Si el array esta vacio devuelve undef.

unshift( @mi_array, 0); # Añade un elemento a la izquierda;
shift (@mi_array);		# Quita el elemento de la izquierda.

@reverse_array = reverse( @mi_array);	# reverse_array seria (3,2,1).
@mi_array = reverse( @mi_array );		# Obtiene el inverso de si mismo.

-- nota: podemos aplicar la funcion chomp sobre un array y quitara el salto de linia de los registros que la tuviesen.

-- Hash

-- Definicion y asignacion

my %mi_hash;
$mi_hash{"Saludo"} = "Hola";
$mi_hash{"Despedida"} = "Adios";

-- nota: Podemos obtener una lista con los elementos de un hash

@mi_lista = %mi_hash;		# mi_lista = ("Hola","Adios");

-- Funciones

@key_hash = keys( %mi_hash );	# @key_hash = ("Saludo", "Despedida");
@mi_hash = ();	# Vacia el array.

-- para recorrer un hash

while ( ($mi_key, $mi_value) = each( %mi_hash ) )
{
print "Valor $mi_key 
}

-- para borrar un elemento del hash

delete( $mi_hash{"Despedida"} );

-- I / O

while ( <STDIN> )
{
	print $_;
}

# A diferencia de <STDIN> lee la entrada del fichero pasado por parametro;
while ( <> )
{
print $_;
}

-- Fecha y Hora

use Time::localtime;

($sec, $min, $hour, $day, $month, $year) = (localtime)[0..5];
printf("%04d/%02d/%02d %02d:%02d:%02d\n", $year+1900, $month+1, $day, $hour, $min, $sec); #2014/09/09 15:38:46


Dejar un comentario »

Aún no hay comentarios.

RSS feed for comments on this post. TrackBack URI

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Crea un blog o un sitio web gratuitos con WordPress.com.

A %d blogueros les gusta esto: