#!/bin/sh

# En primer lugar, obtenemos los nombres de los ficheros de
# los argumentos.
RULES_FILE="$1"
LIST_FILE="$2"

# Leemos el fichero de reglas línea por línea.
cat "$RULES_FILE" | while read line; do
  # Extraemos los campos de la línea.
  name=`echo $line | cut -d' ' -f1`
  rule=`echo $line | cut -d' ' -f2`
  argument=`echo $line | cut -d' ' -f3`

  # Ordenamos numéricamente según el campo 2
  # usando el guión como separador.  La
  # salida ordenada pasa por grep, que busca
  # las líneas que empiezan por el nombre
  # especificado en la regla.  La salida
  # de grep va a los filtros finales.
  sort -n -k2 -t- "$LIST_FILE" | grep "^$name" | case $rule in
      # Para sacar las primeras incidencias.
      first)  head -n $argument
              ;;
      # Para sacar las últimas incidencias.
      last)   tail -n $argument
              ;;
      # Para sacar una incidencia de cada
      # tantas.
      every)  awk 'BEGIN { N = '$argument' }
                   (NR % N) == 1 { print }'
              ;;
  esac
done
