#!/usr/bin/env bash tournament=autumn2013 # Regexps to parse the result of game date='([0-9]{2}\.[0-9]{2}\.[0-9]{4})' white='(.+)' black='(.+)' result='((1|0|0\.5):(1|0|0\.5))' # Directories to search `tour_info' in if [[ $# != 0 ]]; then tour_dirs=() for number in $@; do # Change tour numbers: `1' -> `01', `2' -> `02', and so on number=0"$number" number=${number:(-2)} tour_dirs+=($tournament/tour_$number) done else tour_dirs=($tournament/tour_*) fi for dir in "${tour_dirs[@]}"; do number=${dir:(-2)} number=${number#0} # remove the leading `0' if any echo "- number: ${number}" echo " games:" # Add a newline at the end of `tour_info' to parse the last line tour_info=$(cat $dir/tour_info && echo) while read line; do # Parsed data of game: date a[1], white player a[2], black # player a[6], and the result a[3] data=( $(echo "$line" | gawk --re-interval \ 'match($0, /'${date}' — '${white}' '${result}' '${black}'/, a) \ { print a[1], a[2], a[6], a[3] }') ) if [[ ${#data[@]} != 0 ]]; then echo " - date: ${data[0]}" echo " white: ${data[1]}" echo " black: ${data[2]}" echo " result: '${data[3]}'" echo fi done <<< "$tour_info" done