Вы можете сделать что-то вроде:
let getBetween (a:string) (b:string) (str:string) =
str.Split(a.ToCharArray()).[1].Split(b.ToCharArray()).[0].Trim()
let total (a:string seq) =
(a |> Seq.map Int32.Parse |> Seq.reduce (+)).ToString()
File.ReadAllLines("inFile") |> Seq.map (fun l -> (getBetween "owned by" "was" l , getBetween "Pages printed:" "." l) )
|> Seq.groupBy (fun (user,count) -> user)
|> Seq.map (fun (user,counts) -> user + "\t" + (counts |> Seq.map snd |> total) )
|> (fun s -> File.WriteAllLines("outFile",s) )