Vous êtes sur la page 1sur 7

Universidad politécnica salesiana

Ingeniería de sistemas

Sistemas Operativos

En este informe se explicará cómo se pueden aplicar muchos de los comandos utilizados en bash, awk y perl para la
creación de un programa que cumpla con los parámetros establecidos previamente y que pueda ser comprobado
mediante su ejecución desde Linux.

Nombre: Cristian Caiza

Curso: G1

TUTOR: Ing. José Luis Villagómez


Objetivo general:
 Aprender el uso correcto de los comandos utilizados en bash, perl y awk.

Objetivos específicos:
 Construir un programa a partir de los comandos básicos de awk
 Construir un programa a partir de los comandos utilizados en perl
 Conocer nuevos comandos para la generación programas en perl y awk.
Marco teórico:

¿Que es bash?

Es un programa que permite ejecutar las instrucciones que nosotros introduzcamos ya sea vía teclado o mediante los scripts que creemos.
Es decir, el shell tiene una interfaz de texto que funciona a medio camino entre los usuarios y el kernel de Linux.

Historia
Bash quiere decir “Bourne Again Shell” y es una derivacion del sh “Bourne Shell”. El sh es el shell utilizado por los equipos Unix y fue
inventado por Steve Bourne en los años 70.
La sintaxis de los comandos de el bash tiene en gran parte compatibilidad con sh. Además incluye otra serie de recursos de otros shell como
csh(C shell) y ksh(Korn shell) como son el historial de los comandos introducidos o la variable $RANDOM (variable que genera un número
aleatorio) entre otras cosas.
Sintaxis de bash
La sintaxis de órdenes de bash es un superconjunto de instrucciones basadas en la sintaxis del intérprete Bourne. La especificación definitiva
de la sintaxis de órdenes de bash, puede encontrarse en el bash Reference Manual distribuido por el proyecto GNU. Esta sección destaca
algunas de sus únicas características.
Ejemplo:
$ man -k directorio (Muestra el manual del comando que le indiquemos)
¿Qué es awk?
AWK es un lenguaje de programación diseñado para procesar datos basados en texto, ya sean ficheros o flujos de datos. El nombre AWK
deriva de las iniciales de los apellidos de sus autores: Alfred Aho, Peter Weinberger, y Brian Kernighan. awk, cuando está escrito todo en
minúsculas, hace referencia al programa de Unix o Plan 9 que interpreta programas escritos en el lenguaje de programación AWK.
Utilidad:
Está especialmente diseñado para leer y procesar archivos de texto por lo que resulta muy útil su uso combinado con utras utilidades del
sistema operativo.
Comandos de awk:
Los comandos de AWK son las declaraciones sustituidas por acción en los ejemplos anteriores. Los comandos de AWK pueden incluir
llamadas a funciones, asignación de variables, cálculos, o cualquier combinación de estas. AWK contiene soporte propio para muchas
funciones; muchas otras son provistas por las distintas versiones de AWK. Incluso algunas versiones soportan la inclusión de librerías
dinámicamente enlazadas, que pueden proveer aún más funciones.
Ejemplo:

#!/usr/bin/awk -f
BEGIN { print "Hello, world!"; exit }

¿Que es perl?
Perl es un lenguaje de programación muy utilizado para construir aplicaciones CGI para el web. Perl es un acrónimo de Practical Extracting
and Reporting Languaje, que viene a indicar que se trata de un lenguaje de programación muy práctico para extraer información de archivos
de texto y generar informes a partir del contendido de los ficheros.
¿PARA QUE SIRVE?
Aplicaciones del lenguaje Perl Prácticamente, sirve para todo. Todas las tareas de administración de UNIX se pueden simplificar con un
programa en Perl. Se usa también para tratamiento y generación de ficheros de texto. También hay proyectos completos y complejos
escritos en Perl, pero son los menos.
La forma del lenguaje facilita la programación rápida y sucia , el hacer un programa rápido para que funcione.
Perl es un lenguaje multipropósito, en el se pueden hacer desde pequeños scripts para administrar servidores basados en Unix o GNU/Linux,
hasta hacer paginas web, existen proyectos completos realizados en Perl
Entornos de Desarrollo:
Actualmente en el mercado existen muchos entornos de desarrollo para programar en perl de los cuales podemos nombrar a :
1.- SublimeText (Windows y GNU/Linux)
2.- Eclipse (Windows y GNU/Linux)
3.- OpenPerlIDE(Windows)
Ejecución de Perl:
Para ejecutar un programa en Perl es necesario que este inicie con:
#!/usr/local/perl ,
esta línea indica la ubicación del interpretador Perl en el sistema (nótese la similitud con un archivo de Shell que debe iniciar con: #!/bin/sh
).

Desarrollo

Hacer un menú en bash.


En la primera opción pedir el nombre del archivo y cuantos desea crear
Después pedir que ingrese dos meses entre los que hay que buscar archivos menores a 200 y mayores a 1000.
Imprimir los que cumplan esa condición numerados línea por línea y en orden alfabético.
También imprimir loa suma de tamaños y promedios y guardar eso en un archivo
En la segunda opción crear un programa en perl que permita utilizar es archivo antes creado y otros más para lo cual pedir el nombre del
archivo que se desea abrir.
Mostrar su contenido
Transformarlo en arreglo igual imprimirlo
Pedir palabras para buscar y remplazar dentro del archivo
Imprimir línea por línea
Transformarlo a cadena e igual imprimirlo.
En la tercera opción sales del programa

CODIGO DEL PROGRAMA EN AWK:

retono=1 #creo una variable para utilizarlo posteriormente en el ciclo while

#creo un menú utilizando while y case


while [ $retono -eq 1 ]
do

echo OPCION 1
echo OPCION 2
echo OPCION 3 SALIR

read op

case $op in

1)

#creo un ciclo de repeticion que me permita crear una n cantidad de archivos con un determinado
nombre y a su ves lo pongo en un ciclo while del cual se saldrá al elegir la opcion 2

rp=1
while [ $rp -eq 1 ]
do
echo ingrese cuantos documentos desea ingresar
read num
echo ingrese el nombre que tendran esos documentos
read nomb
echo desea ingresar mas archivos?
echo 1 SI
echo 2 NO
read rp1

for((i=1; i<=$num;i++))
do
touch $nomb$num
done

if [ $rp1 -eq 1 ]
then
rp=1
else
rp=0

fi
done
#pido me sean ingresados dos meses para luego compararlos en el procedimiento de awk

echo ingrese el primer mes en que desea buscar


read mes

echo ingrese el segundo mes en que desea buscar


read mes2

#es muy importante saber que para utilizar las variables antes creadas primero debo llamarlas justo
despúes de awk con la siguiente sintaxis.( -v pasa="$mes" )

ls -l | grep '^-' | awk -v pasa="$mes" -v pas2="$mes2" '

BEGIN{print "impresion de archivos";}{

#aplico las dos condiciones antes pedidas por medio de if

if( $5 < 200 || $5>1000 ){


if($6== pasa || $6==pas2 ){

print NR,"\t",sort,$9,"\t",$6;

print $9,$6 | " sort -r > act2" #utilizo una tubería para que el resultado sea guardado en un
archivo

suma=suma $5 #creo una variable que irá sumando los valores encontrados en la columna $5
n++ #creao un contador para utilizarlo posteriormente en el calculo del promedio
}

}
END{
print "la suma de los archivos es=",suma,"\n";
print "la promedio de peso de los archivos es=",(suma/n),"\n";

print "adios\n";

}'

;;

2)
perl upract.pl #utilizo esta sintaxis para llamar al programa que cree en perl
;;

3)
retono=0
;;

esac
done

CODIGO DEL PROGRAMA EN PERL:

print "ingrese nombre del archivo\n";


$arch=<stdin>;

open(LEC, "<$arch");
while(<LEC>){
print;
}

close LEC;

print "Ingrese datos al archivo\n";


BLQ: while($dat=<stdin>){

if($dat=~/salir$/){
last BLQ;

}
open (ESC, ">>$arch");
print ESC $dat;

}
close ESC;

print "Asi est al archivo ahora\n";

open(LEC2, "<$arch");
while(<LEC2>){
print;
}

close LEC2;

#convertir a arreglo
open(ARR, "<$arch");
$i=0;
while ($var1=<ARR>){
@arreglo[$i]=$var1;
$i++;
}
close ARR;

#converti por segunda vez


open(ARR, "<$arch");
$i22=0;
while ($var22=<ARR>){
chomp($var22);
@arreglo22[$i22]=$var22;
$i22++;
}
close ARR;

#buscar y remplazar
$l=0;
while($l==0){

print "ingrese palabra a buscar\n";


$ant=<stdin>;
chomp($ant);
print "ingrese palabra por la cual desea remplazar\n";
$nuev=<stdin>;
chomp($nuev);

foreach $var3(@arreglo){

if($var3=~ m/$ant/g){
$l++;
}
}
print "no se encontraron coincidencias\n";
print "Nuevamente\n";
}

open(REMP,">$arch");

foreach $varn1(@arreglo){
if($remplazo = $varn1=~ s/$ant/$nuev/g){
print REMP $varn1;
}else{
print REMP $varn1;
}

print "asi quedo el archivo ahora\n";


open(LEC5, "<$arch");
while(<LEC5>){
print;
}

close LEC5;

print "Asi queda el arreglo\n ";


#impimir linea por linea
$l=0;

foreach $var2 (@arreglo){


@arreglo2 = split (" ", $var2 );

foreach $varn2 (@arreglo2){

print "posicion [$l]= $varn2\n";


$l++;

}
}

print"imprimo en orden alfabetico\n";


$l5=0;
$l6=0;

foreach $var21 (sort @arreglo){


sort @arreglo21 = split (" ", $var21 );
$l6++;
foreach $varn21 (sort @arreglo21){

print "posicion [$l5]= $varn21\n";


$l5++;

}
}

#Bono creé un nuevo arreglo para posteriormente utilizarlo en el conteo de palabras remplazadas que
serán impresas.

@remplazos=(@remplazos,@arreglo);

chomp(my $vart=join(" ",@remplazos));


print "convertido a frase lineal=($vart)\n";

print"aqui estan las palabras remplazadas fueron $l6\n";


print grep(/$nuev/,@remplazos);
print"\n";

CONCLUSIONES:

 Cuando creamos un programa en awk podemos utilizar comandos que nos permiten concatenar también programas hechos en perl
 Awk nos sirve para procesar archivos de texto mientras que perl nos permite extraer información de esos archivos.

RECOMENDACIONES:

 Es importante llamar a la variable que se creado en bash dentro de awk para poder utilizarla.
 Revisar las sintaxis básicas dentro del script a cada momento para no sobrellevar errores

Referencias
Bermejo, J. P. (s.f.). linuxfocus. Obtenido de http://linuxfocus.org/Castellano/September1999/article103.html

Fransisco. (s.f.). Soluciones informaticas. Obtenido de http://francisconi.org/linux/comandos/awk

Osmosis Latina. (s.f.). lenguaje perl basico. Obtenido de https://www.osmosislatina.com/lenguajes/perl/basico.htm.

Vous aimerez peut-être aussi