Here is a translation of the steps in your question to GRASS commands. Without knowing how your data are structured, I'll make some assumptions. Lets say the precipitation data are CSV files with three columns, x_coord, y_coord and precip. Each file precip file has the year in its file name, like "precip_2010.csv". And I'll assume you have already imported your catchment areas into GRASS as polygon vector named "catch". Then:
# Loop thru all year data columns in CSV files
for col in `seq 3 55`; do
# (Note: You could add some trickery here
# to calculate the actual year from the column number)
# Read into GRASS using the r.in.xyz module
# set 'z' parameter to the column number
r.in.xyz input=$f output=new_precip method=sum separator=comma z=$col
# Don't forget to set the computational region
g.region -p rast=new_precip
# Get statistics for this year into the catchments
# Here are only three statistics, but there are more available
v.rast.stats map=catch rast=new_precip method=minimum,maximum,average column_prefix="stats_"$col
# Remove raster
g.remove -f rast name=new_precip
After the script completes, the catchments vector will have three new columns for each of the years: minimum, maximum and average precipitation for each catchment for each year (165 new columns). So there would be, i.e. columns named "stats_2010_minimum, stats_2010_maximum, stats_2010_average" and so on for all years. You will also have all the precipitation rasters for all years.
The above is suited for running in a bash terminal (linux). On windows, it would have to be changed to use the equivalent windows commands.
Does that help?