#!/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