Ejercicios Resueltos de Programación AWK y Comandos Linux

Clasificado en Informática

Escrito el en español con un tamaño de 26,22 KB

PROGRAMACIÓN APLICADA – PAD3501

Prueba #3

2Q==

Indicaciones Generales

  • Esta prueba consta de 6 preguntas abiertas de respuesta breve.
  • Las preguntas del Ítem I tienen un puntaje de 5 puntos cada una, y las preguntas del Ítem II tienen un puntaje de 25 puntos cada una, en caso de estar completamente correctas.
  • El puntaje máximo de la prueba es de 70 puntos. La nota 4.0 se obtiene logrando el 60% de este puntaje, es decir, con 42 puntos.
  • Durante la prueba, el alumno puede utilizar un PC con Linux (sin conexión a internet) para probar sus respuestas y consultar el manual en línea de Linux. Sin embargo, no se permite el uso de otros equipos electrónicos como celulares, reproductores MP3 o computadoras portátiles, entre otros.
  • Utilice bolígrafo para la especificación final de su respuesta.
  • La prueba tiene una duración de 90 minutos.

ÍTEM I: Comandos AWK

Escriba los comandos AWK que permitan realizar las siguientes actividades:

1. Mostrar la última palabra de cada línea de un archivo. (5 puntos)

awk '{print $NF}' archivo

2. Imprimir el número total de líneas de un archivo (equivalente al comando wc -l). (5 puntos)

awk 'END {print NR}' archivo

3. Imprimir la primera palabra de todas las líneas del archivo que contengan más de 20 caracteres. (5 puntos)

awk 'length > 20 {print $1}' archivo

4. Imprimir en pantalla los archivos regulares sobre los cuales el propietario solo tiene permisos de lectura y escritura. (5 puntos)

ls -l | grep '^-rw-------' | awk '{print}'
Otra respuesta:
ls -l | awk '/^-rw-------/ {print $0}'
Otra respuesta:
ls -l | awk '$1=="-rw-------" {print $9}'

ÍTEM II: Programación en AWK

1. Cree un script AWK que lea un archivo con nombres, apellidos y 4 notas (según el formato de ejemplo, debe incluir al menos 3 alumnos). El script debe generar un reporte en pantalla que muestre a los alumnos aprobados con su promedio, y a los reprobados con el mensaje "REPROBADO" (sin mostrar su promedio). (25 puntos)

Considere el siguiente ejemplo de registro: Juan;Pérez;5.1;6.2;4.5;3.4.

Contenido del archivo alumnos.txt:
Juan;Pérez;5.1;6.2;4.5;3.4
Manuel;González;2.5;3.1;6.7;7.0
Pedro;Pinto;4.5;6.7;5.6;6.1
Luis;Paredes;4.6;6.3;2.3;2.4
Contenido del script situacion.awk:
BEGIN {
    FS = ";"
    print "Apellido Nombre Situación Promedio"
}
{
    promedio = ($3 + $4 + $5 + $6) / 4
    if (promedio >= 4.0) {
        print $2, $1, promedio, "Aprobado"
    } else {
        print $2, $1, "Reprobado"
    }
}

2. Cree un script que lea el archivo /var/log/secure y genere un reporte (ip_fallido.txt) con todos los intentos de inicio de sesión fallidos ("Failed password"). El reporte debe mostrar solo la hora del intento, el usuario y la dirección IP. Primero, utilice grep para filtrar las líneas que contengan "Failed password", y luego AWK para extraer y mostrar los campos solicitados. (25 puntos)

#!/bin/bash

clear

# Filtra los intentos de inicio de sesión fallidos y guarda en un archivo temporal
grep "Failed password" /var/log/secure > ip_fallido_temp.txt

echo -e "\tIntentos de Inicio de Sesión Fallidos"
echo -e "Hora\t\tUsuario\t\tIP"

# Procesa el archivo temporal para extraer la hora, usuario e IP
awk '{
    hora = $3; # Hora (e.g., 10:00:00)
    usuario = "";
    ip = "";
    for (i=1; i<=NF; i++) {
        if ($i == "for") {
            if ($(i+1) == "invalid" && $(i+2) == "user") { # "for invalid user test" -> test
                usuario = $(i+3);
            } else { # "for root"
                usuario = $(i+1);
            }
        } else if ($i == "from") {
            ip = $(i+1);
        }
    }
    print hora "\t\t" usuario "\t\t" ip
}' ip_fallido_temp.txt > ip_fallido.txt

# Opcional: Eliminar el archivo temporal
# rm ip_fallido_temp.txt

Entradas relacionadas: