-#!/usr/bin/awk -f
+#!/usr/bin/sh -e
# Fortune implementation in awk
+usage()
+{
+ echo "fortune -- a simple awk/POSIX sh implementation of fortune"
+ echo ""
+ echo "\t-h, --help show this help message"
+ echo "\t-l, --list=\$FILE list installed cookie files"
+ echo "\t-f=\$FILE, --file=\$FILE specify path to cookie file"
+ echo "\t-c=\$FILE, --cookie=\$FILE specify cookie file"
+}
+
+FILE="$(find /usr/share/fortune/ -type f -not -name '*.dat')"
+while [ "$1" != "" ]; do
+ PARAM=`echo $1 | awk -F= '{print $1}'`
+ VALUE=`echo $1 | awk -F= '{print $2}'`
+ case $PARAM in
+ -h | --help)
+ usage
+ exit
+ ;;
+ -f | --file)
+ FILE=$VALUE
+ ;;
+ -c | --cookie)
+ FILE=/usr/share/fortune/$VALUE
+ ;;
+ -l | --list)
+ ls -1 /usr/share/fortune
+ exit
+ ;;
+ *)
+ echo "ERROR: unknown parameter \"$PARAM\""
+ usage
+ exit 1
+ ;;
+ esac
+ shift
+done
+
+awk '
BEGIN {
- "date +%N" | getline time
- srand(time)
- "grep '%' " ARGV[1] " | wc -l" | getline n
- line = int(rand() * n)
+ f++
}
-/%/ {
- if (p) {
- exit
- }
- z++
- next
+$1 == "%" {
+ f++
}
-z == line {
- print $0
- p = 1
+{
+ sub("%", "")
+ fortunes[f] = fortunes[f] (length(fortunes[f])?"\n":"") $0
}
+
+END {
+ "date +%N" | getline time
+ srand(time)
+ print fortunes[int(rand() * f-2) + 2]
+}' $FILE