sábado, 29 de marzo de 2014

Bloque II - Programacion con sistemas

EXPRESIONES REGULARES


1- Escribe un script que reciba como argumentos los nombres de dos directorios y  que copie todos los ficheros con extensión .txt del primer directorio al segundo.  Se   debe   comprobar   que   se   le   pasan   dos   argumentos   al   script   y   que   son  directorios que existen, antes de hacer la copia.
#!/bin/bash


if [ $# -eq 2 -a -d $1 -a -d $2 ]
then
     cp $1/*.txt $2
else
    echo No pasas dos argumentos
fi


2- . Escribe un script que, empleando un bucle for, sume los número enteros hasta  un número dado como argumento.
#!/bin/bash


i=0
suma=0
for i in `seq 0 1 $1`
do
    ((suma=suma+$i))
done
echo La suma de los $1 numeros es $suma


3- Escribe un script que tome como argumentos el nombre de un directorio y una  cadena de texto (puede contener espacios) y muestre un listado indicando, para  cada archivo por separado, el número de lineas que contienen esa cadena.
!/bin/bash


if [ $# -ne 2 ]
then
echo nª de argumentos incorrectos
elif [ -d $1 -a -n $2 ]
then
    grep -c $2 $1/*
elif [ -d $2 -a -n $1 ]
then
    grep -c $1 $2/*
else
echo los argumentos no son correctos
fi


4- Resuelve el ejercicio anterior mediante una función que tome como argumentos  el  archivo   y  la  cadena  y muestre  el  número  de  líneas  que  contienen  dicha  cadena.
#!/bin/bash


funcion4 ( )
{
if [ $# -ne 2 ]


then


echo nª de argumentos incorrectos


elif [ -d $1 -a -n $2 ]


then


   grep -c $2 $1/*


elif [ -d $2 -a -n $1 ]


then


   grep -c $1 $2/*


else


echo los argumentos no son correctos
fi
}


echo Los argumentos recibidos son: $*


funcion4 $1 $2


5- . Localiza todas las líneas que contengan palabras que comienzan por la letra a  en varios ficheros de texto.
grep -w “a*” f1 f2 f3

6- ¿Qué información te proporciona la ejecución de la siguiente orden? ps aux | grep “apache”
La salida de "ps aux" es una tabla donde cada fila es un proceso y las columnas contienen la siguiente información:
  • USER: usuario con el que se ejecuta el proceso
  • PID: ID del proceso
  • %CPU: porcentaje de tiempo que el proceso estuvo en ejecución desde que se inició
  • %MEM: porcentaje de memoria física utilizada
  • VSZ: memoria virtual del proceso medida en KiB
  • RSS: "resident set size", es la cantidad de memoria física no swappeada que la tarea a utilizado (en KiB)
  • TT: terminal que controla el proceso (tty)
  • STAT: código de estado del proceso (información detallada más adelante)
  • STARTED: fecha de inicio del proceso
  • TIME: tiempo de CPU acumulado
  • COMMAND: comando con todos sus argumentos
Busca el comando apache


7- Modifica la salida del comando  ls  para obtener una  lista con un elemento por  línea
 ls -l


8- a) Convierte   todos   los   caracteres   del   fichero  alumnos.txt    a   minúscula,  almacenando el resultado en otro fichero
b) Borra todas las vocales del fichero alumnos.txt almacenando su  resultado  en otro fichero
c) Elimina todas las líneas en blanco del fichero alumnos.txt
d) Escribe   cada   palabra   del   fichero  alumnos.txt  en   un   solo   renglón.
a) more alumnos.txt |  tr [:upper:] [:lower:] > minus.txt
b) more alumnos.txt |  tr -d [AaEeIiOoUu] > vocales.txt
c) more alumnos.txt |  tr -s “/n/n” ”/n”
d) more alumnos.txt |  tr -s “ ” ”/n”


9-
Explica que hacen las siguientes ordenes: • find.  • find ­depth ­type d ­empty • find ­depth ­type f ­empty
A) Busca archivos en un directorio
B) Busca directorios recursivamente vacios
C)Busca archivos vacios

10- Obtén sólo los directorios cuyo nombre comienza por d (mayúscula o minúscula)  del directorio /etc redireccionando la salida estándar de error al fichero errores
find /etc -type d -iname ‘d*’ 2>~/errores

11- Localiza  todos  los  ficheros  del  directorio /etc  cuya  fecha  de modificación  sea  posterior al 1/01/2012 a las 00:00h. 
touch -t 201201010000 comoquerais
find /etc -newer comoquerais

12- Busca los directorios que estén vacíos en los directorios /etc y /home 
find /etc /home -empty -type d
13- Localiza todos los ficheros .avi desde el directorio raíz cuyo tamaño sea superior  a 700 Megabytes, redireccionado los posibles errores al periférico nulo  
find / -name ‘*.avi’ -size +716800k 2>/dev/null
14- Busca todos los ficheros que comienzan por f (mayúscula o minúscula) y posean  la extensión txt (en minúscula),  que exactamente tengan permiso de lectura y  escritura para el propietario y el grupo 
find / -name ‘[Ff]*.txt’ -perm 660
15- Localiza  todos  los  ficheros  que  cuelgan  de  tu  directorio  actual  a  los  que  se  accedió hace un año exactamente.  
find  -atime 365
16- Localiza todos  los directorios que cuelgan directamente del directorio /home  o  del directorio /etc, cuyos nombres contengan una n.
find /etc /home -maxdepth 1 -name ‘*n*’ -type d
17- Añade permiso de ejecución para el propietario de todos los ficheros que cuelgan  de tu directorio actual cuyo propietario no sea el root 
find -type f !-user root | xargs chmod u+x 2>/dev/null
18- Borra todos los ficheros con extensión jpg  que cuelgan de tu directorio actual,  pidiendo confirmación del borrado
find ~ -name ‘*.jpg’ -type f -exec rm -i {} /;
19- Escribe un script que presente al usuario un menú con las siguientes opciones:
Espacio ocupado por un directorio (incluyendo subdirectorios) • Número de archivos contenidos en un directorio (incluyendo subdirectorios) • Número   de   archivos   contenidos   en   un  directorio   con   un   tamaño   inferior   a   uno  introducido por el usuario • Comprimir los archivos contenidos en un directorio cuyo tamaño sea superior a uno  introducido por el usuario. • Salir
1) echo espacio ocupado por el directorio $1
du -h $1;;
2) find $1 -type f | wc;;
3) echo introduce tamaño en bloques de 512b
read tam
echo el numero de ficheros con un tamaño menor a $tam
find $1 -type f -size -$tam | wc -l;;
4) echo introduce tamaño en bloques de 512b
read tam2
echo el numero de ficheros con un tamaño menor a $tam2
find $1 -type f -size +$tam2 |  xargs  bzip2 -vk;;




20- Borra   los   ficheros   regulares   que   empiecen   por  A  en   el   directorio   actual   y  descendientes 
find  -name 'a*' -type f | xargs rm -r
21- Localiza todos los archivos que cuelgan del directorio de inicio cuya extensión  sea  sh,  y muestra  toda  la  información  de  cada  uno  de  ellos.  Esta  línea  de  ordenes debe funcionar para cualquiera de los usuarios conectados al sistema.
find ~ -type f -name '*.sh' | xargs ls -l


EDITOR DE FLUJO SED

1. Borra las líneas en blanco de varios ficheros.
2. Explica que haría el siguiente script: original="mejor"  nueva="optimo"  for f  in  $(find .  ­type   f` ) do     sed  s/$original/$nueva/g   $f   > $f.tr     mv   $f.tr   $f  done 
3. Haciendo uso del fichero alumnos.txt descrito a continuación: Apellidos y Nombre, Grupo reducido, Convocatorias consumidas
Garcia Garcia Jose 1 primera Lopez Lopez Alba 2 primera Gonzalez Gonzalez Maria 2 primera Sanchez Perez Ana 3 segunda Martinez Martinez Carmen 2 primera Morales Morales Pedro 1 segunda Gonzalez Lopez Luis 3 primera Alvarez Alvarez Manuel 1 primera Jimenez Jimenez Luisa 2 segunda # Alumno repetidor Gomez Gomez Antonio 1 primera Sanchez Sanchez Teresa 1 segunda Vazquez Vazquez Angel 2 primera Lorenzo Gomez Isabel 3 primera
• Elimina todas las líneas de comentario (empiezan por #) • Elimina las líneas impares • Elimina todas las líneas que no comiencen por G  • Obtén desde la línea 3 hasta la línea 7 • Visualiza  sólo   las  líneas  del  fichero   que   no   comienzan  por  una   vocal  en  mayúscula. • Visualiza el contenido del fichero alumnos.txt de forma que aparezca primero  el grupo reducido al que pertenece seguido de los apellidos y nombre, y por  último la convocatoria. • Sustituye   la   palabra   primera   por   primer   desde   la   cuarta   línea   hasta   la  primera línea que sea un comentario (empieza por #) • Sustituye desde  la  línea que comienza por Lopez hasta  la quinta  línea  la  palabra primera por primer • Explica la diferencia que existe entre los dos comandos siguientes: sed  ­n ‘s/primera/una/p’   alumnos.txt     sed  ‘s/primera/una/p’   alumnos.txt    • Visualiza  el  contenido   del  fichero  alumnos.txt  usando   como  separador  de  campos el tabulador y no el espacio en blanco.
4. Haciendo uso del fichero alumnos.txt detallado en el ejercicio anterior, explica las  diferencias existentes entre las siguientes ordenes: • sed ­n '3p' alumnos.txt • sed '3p' alumnos.txt • sed '3{p;q}' alumnos.txt • sed ­n '3{p;q}' alumnos.txt
5. Dado el siguiente fichero, denominado ajos.txt, escribe un script sed que cambie  todas las apariciones de la palabra ajo por frijol. El resultado de este cambio se  plasma en el fichero ajosDefinitvo.txt .
ajos.txt El trabajo dignifica al hombre Las semillas del ajo tienen un fuerte olor a ajo Ajolote es un animal extraño
Ajo para ahuyentar al vampiro!
Obrajosa, el pueblo de Doña Perfecta
Le rebajo el kilo de ajos

ajosDefinitivo.txt
El trabajo dignifica al hombre
Las semillas del frijol tienen un fuerte olor a frijol
Ajolote es un animal extraño
Frijol para ahuyentar al vampiro!
Obrajosa, el pueblo de Doña Perfecta
Le rebajo el kilo de frijoles

6. Elimina la cabecera (primera fila de títulos) que aparece al ejecutar el comando 
ps.

7. Explica en que se diferencian las siguientes sentencias:
sed    ­n     '/root/p'   /etc/passwd
sed      '/root/p'   /etc/passwd

8. Obtén un listado largo de sólo los directorios que cuelgan del directorio /home

9. Suponiendo  que  los  datos  del  fichero  alumnos.txt  están separados  por  varios 
espacios en blanco, reemplázalos por un sólo espacio en blanco.


1) Borra las líneas en blanco de varios ficheros
sed -e ‘/^$/d’ fichero

2) Busca ficheros regulares y reemplaza la palabra mejor por optimo todas las veces que aparece del fichero en cuestion y los mete en el archivo f.tr.
Despues cambia el nombre del fichero con todos los cambios por el nombre del fichero regular

3)
a) sed -e ‘/^#/d’ fichero

b) sed -e ‘1~2 d’ fichero
   sed -n -e ‘n;p’ fichero

c) sed -e ‘/^G/d’ fichero
   sed -e ‘/^G/!d’ fichero

d) sed -ne ‘3,7p’ fichero

e)sed -ne ‘/^[AEIOU]/!p’ fichero

f) sed -e 's/\([[:alpha:]]* [[:alpha:]]* [[:alpha:]]*\) \([[:digit:]]\) /  \2 \1 /' asd.sh

g)  sed -e '4,/^#/s/primera/primer/' asd

h)  sed -e '/^Lopez/,5s/primera/primer/' asd

i) Con -n te muestra las líneas modificadas, mientras que sin el -n te muestra 2 veces las líneas modificadas (una por defecto y una por la p) y las no modificadas (por defecto).

j)sed -ne ‘s/ /\t/pg’ fichero



4)
a) Muestra línea 3.

b) Muestra todas las lineas, la linea 3 la duplica.

c)  Se muestran todas las lineas hasta la 3, esta se duplica y abandona el proceso.

d)  Muestra la línea 3 y abandona el proceso.

5-
#!/bin/bash
sed -e ‘s/ ajo/ frijoles/g’ ajos>ajosDef
sed -e ‘s/Ajo /Frijol /g’ ajosDef>ajos2
sed -e ‘s/ ajo/ frijol/g’ ajos2>ajosDef


6- ps | sed -e '1d'

7-
a)imprime el contenido del espacio de patrón, inclusive cuando se utiliza la opción
–n (modo silencioso).

b) Esta orden no borra el espacio de patrón

8- ls -l /home | sed -n ‘/^d/p‘

9- sed -e ‘s/ \+/ /g’ alumnos
   sed -er ‘s/ +/ /g’ alumnos

Ejercicio opcional dejar espacio en blanco entre caracteres: sed -e ‘s/ */ /g’ alumnos

EDITOR DE FLUJO SED AVANZADO

1. Elimina las líneas en blanco de varios ficheros, mostrando el número de línea de  aquellas que no se eliminan.
2. Haciendo uso del fichero alumnos.txt descrito en la actividad 2:
• añade la línea “NOMBRE ALUMNO” delante de cada línea que contenga el  nombre de un alumno (es decir, que no sea un comentario); • almacena   en   el   fichero  GruposAlumnos.txt  el   contenido   del   fichero  alumnos.txt pero cambiando el nombre asignado a los grupos reducidos de la  siguiente forma:  los que pertenecen al grupo reducido 1, su nuevo nombre  será SOII_1,  los que pertenecen al grupo reducido 2, su nuevo nombre de  grupo será SOII_2, y así sucesivamente. (No se puede usar el operador de  redireccionamiento de la salida); • almacena   en   el   fichero  GrupoSOII_1.txt  las   líneas   del   fichero  GruposAlumnos.txt  que  correspondan sólo  al  grupo SOII_1.  (No se puede  usar el operador de redireccionamiento de la salida); • visualiza   el   contenido   del   fichero  GrupoSOII_1.txt    teniendo   como   título  “ALUMNOS DEL GRUPO 1”; • describe que realiza la siguiente orden: sed '/^[LM]/,/^[SV]/s/primera/una/w resultado.txt' alumnos.txt.
3. Escribe un script sed que realice las siguientes operaciones sobre un fichero que  contiene un programa escrito en C:
• elimine las líneas en blanco; • elimine los comentarios de bloque (bloques de líneas que empiezan por /*  y  terminan por */);
• ponga el comentario “Begin main function” antes de la función principal.
4. Suponiendo   que   el   fichero  firma.txt   contiene   una   firma   concreta.   Añade   el  contenido de este fichero al final de todos los ficheros cuya extensión sea txt.

5. Explica la diferencia que existe entre los dos comandos siguientes: sed    ­s    '$d'     t* sed    '$d'    t* 
6. Se dispone de un fichero fechas.txt donde cada línea contiene una fecha expresada  con el siguiente formato:  mes día año (separados por un espacio en blanco) Usando el editor sed, almacena en el  fichero  spain_fechas.txt  esas fechas pero  aplicando el siguiente formato: día mes año (separados por un espacio en blanco)
Entrada:  Marzo 4 2014 Salida: 4 Marzo 2014
7. Dado el fichero profesores.txt con el siguiente contenido:
Numero: 1 Nombre: Josito Telefono: 988-567841 Numero: 2 Nombre: Juancito Telefono: 988-326574 Numero: 3 Nombre: Miguelito Telefono: 988-459678

Escribe un script sed que presente ese contenido con el siguiente formato:
1;Josito;988-567841 2;Juancito;988-326574 3;Miguelito;988-459678
8. Usando el fichero  profesores.txt descrito anteriormente, escribe un script sed que  presente el contenido de dicho fichero con el siguiente formato: 988-567841, Josito 988-326574, Juancito 988-459678, Miguelito

9. El fichero de texto caracteristicas.txt (disponible en Faitic, semana 7) contiene 88  características de textura calculadas para 1023 células. Por lo tanto,  el   fichero  se compone de 1023 líneas y cada línea tiene 88 campos numéricos. Al final de  cada línea existen dos campos que identifican la clase (sn = sin núcleo y cn = con  núcleo) y el estado de maduración (vit = vitelino, atre = atrésico, hid = hidratado  y  ac = alveolo cortical)  de   cada   célula. Escribe un script sed que realice lo  siguiente: • reemplace   el   carácter  e  usado   en   la   notación   científica   por   el   mismo  carácter pero en mayúscula; • divida   el   fichero  caracteristicas.txt  en   dos   ficheros   de   forma   que   las  características de  las células sin núcleo  (sn) se almacenen en el  fichero  sinNucleo.txt  y   las   características   de   las   células   con   núcleo   (cn)   se  almacenen en el fichero conNucleo.txt; • para aquellas células que sean sin núcleo (sn) y también alveolo cortical  (ac), escriba dicha clase (sn) con los dos caracteres en mayúscula (SN); • elimine   del   fichero  conNucleo.txt  todas   las   caracterísiticas   de   aquellas  células que sean vitelinas (vit).




1- sed -e ‘/^$/d;=’ fich1 fich2
2- a) sed -e 's/\([[:alpha:]]* [[:alpha:]]* [[:alpha:]]*\) /NOMBRE ALUMNO \1 /' asd
        sed ‘/^#/!i\Nombre Alumno’ asd
   b) sed -e 's/\([[:alpha:]]* [[:alpha:]]* [[:alpha:]]*\) \([[:digit:]]\) /   \1 \SOII_\2 / w fich' asd
        sed ‘s/[0-9]/SOII_&/;w GrupoSOII’ asd
   c)sed -n '/SOII_1/w grupoSOII_1' fich
   d) sed -e '1i\\tAlumnos Grupo 1' grupoSOII_1
   e) Modifica todas lineas posteriores a una linea que empiece por L y para cuando encuentra una línea que empiece por V, pero antes deberá encontrar una linea que empiece por S y antes una que empiece por M.
3- #!/bin/bash
 sed -e ‘/^$/d’ asd > aux
 sed -e '/^\/\*/,/\*\/$/ d' aux > aux2
 sed -e ‘/main/i\/\/#Begin test’ aux2 > asd
4- sed -s '$ r firma.txt' fich1 fich2
5- a) Con -s tratas todos los archivos que empiezan t seran tratados de forma independiente, se eliminara la ultima linea de cada una.
    b) Cogemos todos los archivos y los tratamos como si fuese un unico archivo y eliminamos la ultima linea del conjunto(ultima linea del ultimo archivo)
6- sed -e 's/\([[:alpha:]]*\)\( [[:digit:]]*\) / \2 \1 /; w esp_fecha' fecha
7- /^$/d
N
N
s/\n/i/g
s/_//g
s/[[:alpha:]]*//g/ (FALTA UNA PARTE)
8- sed -e /^Nombre/ {
     s/^Nombre://
     h
     n
     s/’Telefono://
     G
     s/\n/,/
     p
}

LENGUAJE AWK BÁSICO

1.Escribe un script que lea el fichero /etc/passwd y presente el login de los usuarios definidos en el sistema. Además, debe informar del UID y de sudirectorio de recepción. awk -F":" '{print $1, $3, $6}' /etc/passwd awk -v FS=":" '{print $1,$3,$6}' /etc/passwd script1.awk BEGIN{ FS=":"} {print $1, $3, $6} awk -f script1.awk /etc/passwd 2.Escribe un script que lea el fichero /etc/passwd y presente el nombre de los usuarios “normales” definidos en el sistema. Además, debe informar del UID y de su directorio de recepción. awk -F=":" '{if ($3>999) print $1,$3,$6}' /etc/passwd script2.awk BEGIN { FS=":"} {if ($3>999) print $1,$3,$6}

3.Cuando un usuario realiza un intento de inicio de sesión y falla al teclear la password, este evento se registra en el fichero /var/log/auth.log. Analiza la información que proporciona este fichero y muestra, siguiendo este orden, el login de aquellos usuarios que han generado este evento junto con la fecha y hora. awk '/authentication failure/ {print $NF,$1,$2,$3}' /var/log/auth.log


4- Se dispone de un fichero fechas.txt donde cada línea contiene una fecha expresada  con el siguiente formato:  mes/día/año (separados por el carácter /) Usando  awk, almacena  en  el  fichero  rango_fechas.txt  las  fechas cuyo año sea  superior a 1999. Las fechas se almacenarán con el siguiente formato: día mes año  (separados por un espacio en blanco)
awk -F "/" '{if($3>1999) print $2,$1,$3}' ~/fechas.txt > rango.txt

5- Escribe un programa awk que presente ese contenido con el siguiente formato,  utilizando como separador de campo el tabulador:
awk -v FS="\n" -v RS="" 'BEGIN {print "Nº\tNombre\tTelefono\n"}{print $1"\t"$2"\t"$3"\n" }' prueba
   
   awk.awk
   BEGIN {FS="\n";RS="";OFS=”\t”;print "Nº\tNombre\tTelefono\n"}
   {print $1,$2,$3”\n" }


awk -v RS="\n\n" -v FS="\n" -v ORS="\n\n" -v OFS="\t" 'BEGIN {print"Nº\tNombre\tTelefono"} {print $1,$2,$3}' profe


6- Escribe un programa usando awk que muestre en pantalla el número total de  bytes de todos los ficheros del directorio actual que fueron modificados por última  vez en Enero (puedes elegir otro mes) de cualquier año.
awk6.awk


BEGIN{
TOTAL=0
} {
if($6=="feb"){
TOTAL=TOTAL+$5
}
}
END{
print"El total de bytes es " TOTAL
}


if($6 ~ /-03-/)
ls -l | awk -f awk6.awk



7- El fichero de texto statistics_color.txt  (disponible en Faitic, semana 8) contiene 
las 27 características de textura calculadas para 1023 células. Por lo tanto, el fichero se compone de 1023 líneas y cada línea tiene 27 campos numéricos. Al final de cada  línea existen dos campos que  identifican  la clase (sn y cn) y el estado  de maduración  (vit,  atre,  ac). Escribe un  programa  usando  awk,  que proporcione la media aritmética para las características 1, 5, 7 y 12 de aquellas células que coincidan con los siguientes criterios: sn vit, sn ac, sn atre, cn vit, cn ac y cn atre.


#!/usr/bin/awk -f
BEGIN{ print "Estadisticas";print "\tCarac1\tcarac2\tcarac5\tcarac7\tcarac12\n";}


{
/sn vit/ { sn_vit++; sn_vit_1+=$1; sn_vit_5+=$5;sn_vit_7+=$7;sn_vit_12+=$12;}
/sn ac/ { sn_ac++; sn_ac_1+=$1; sn_ac_5+=$5;sn_ac_7+=$7;sn_ac_12+=$12;}
/sn atre/ { sn_atre++; sn_atre_1+=$1; sn_atre_5+=$5;sn_atre_7+=$7;sn_atre_12+=$12;}
/cn vit/ { cn_vit++; cn_vit_1+=$1; cn_vit_5+=$5;cn_vit_7+=$7;cn_vit_12+=$12;}
/cn ac/ { cn_vit++; cn_ac_1+=$1; cn_ac_5+=$5;cn_ac_7+=$7;cn_ac_12+=$12;}
/cn atre/ { cn_atre++; cn_atre_1+=$1; cn_atre_5+=$5;cn_atre_7+=$7;cn_atre_12+=$12;}
}
END{


print "sn vit", sn_vit_1/sn_vit, sn_vit_5/sn_vit, sn_vit_7/sn_vit, sn_vit_12/sn_vit;
ETC ETC


}

AWK AVANZADO

1- Escribe un script awk que muestre las líneas de un  fichero ordenadas de  forma  creciente.   Suponer   que   el   fichero   de   entrada   contiene   como   primer   campo   un  número entero que se va a utilizar para ordenar las líneas del fichero. Hay que tener  en cuenta que los números de cada línea no están ordenados y no son consecutivos,  puede haber saltos de líneas 

 BEGIN { min=0; max=0; }
    {
if($1 < min)
min=$1;
else if($1 > max)
max=$1;

lineas[$1]=$0;
     }

     END
     {
for(i=min;i<=max;i++)
{
if( i in lineas)
print lineas[i];
}
     }

2- BEGIN{
       RS=" "
       FS="\n"
}
{
       print $0
}
3-
BEGIN{
       FS=":"
}
{
       if($4 != "")    grupo[$1] = $4
}
END{
       FS=","
       for(i in grupo){
               $0 = grupo[i]
               numeros[i] = NF
       }
       for(i in numeros) print "Nombre grupo:", i, "Nº usuarios:" ,numeros[i]
}
4-
BEGIN{
   getline
}
{
   procesos[$2]++;
}
END{
   for( i in procesos ) print "Usuario:", i, "Nº de procesos:",pr
ocesos[i]
}

5-
BEGIN{
   getline
}
{
   procesos[$2]++;
}
END{
   FS=":"
   while ((getline < "/etc/passwd") > 0) nombres[$1] = $6
   for( i in procesos ) {
       for ( j in nombres ){
           if(j == i) nombre = nombres[i]        
       }
       print "Usuario:", i, "Nº de procesos:",procesos[i], "N
ombre completo:",nombre
   }
}
 

6- El  servicio   informático  de   una   empresa  quiere   detectar   qué   máquinas   no  autorizadas están usando sus IP.  Para resolver este problema tienen  que  conocer  que  IP   corresponde   a  cada  computador  de  la   red   de  la   empresa  utilizando  la  dirección  MAC.  Por   lo   tanto,   habrá   que   comprobar   periodicamente   los   datos  correspondientes  a   las   direcciones   IP­MAC,   para   ver   si   hay   alguna   variación.  Escribe un script awk para detectar una posible máquina no autorizada.  Notas:  • utiliza el comando arp ­n que te devuelve información sobre direcciones IP y  MAC; • guarda en un  fichero la dirección IP y MAC de   los equipos de red  de la  empresa, para que después se pueda comparar. Por ejemplo se obtendría el  siguiente fichero lista_IP_MAC.txt: 193.143.43.1 00:0E:7D:10:A0:C0 193.143.43.2 00:02:55:4A:15:D8 193.143.43.3 00:03:34:50:A3:C3 • al   día   siguiente   hay   que   volver   a mostrar  las   IP   y   sus   correspondientes  direcciones MAC. Almacena esta información en otro fichero, por ejemplo en  el fichero arp_IP_MAC.txt: 193.143.43.1 00:0E:7D:10:A0:C0 193.143.43.2 00:02:55:4A:15:D8 193.143.43.3 00:02:15:20:C3:A5 donde   se   ha   resaltado   en   negrita   la   dirección   MAC   de   la   máquina   no  autorizada; • compara   los   ficheros   anteriores  para   detectar   si   alguna   IP   está   siendo  utilizada por un intruso. Utiliza arrays asociativos  y getline.



arp -n | sed -r '1d; s/ +/ /g' > intermedio
cut -f1,3 -d" " intermedio > lista_IP_MAC.txt
script7.awk
#!/usr/bin/awk -f
{ autorizados [ $1] = $2; }
END
{
for( i in autorizados)
{
while ( ( getline var <”lista_IP_MAC.txt”) > 0)
{
split(var,compara,” “);
if((compara[1] == i) && (compara[2]!=autorizados[i]))
{
print “cabron deixa de roubar”
break;
}
}
close(“lista_IP_MAC.txt”);
}
}