Looking for the largests among the open files by all processes. lsof already has the open files with their sizes. It may be passing the right parameters to lsof and processing the output. 
How to find the largest open files?
files;sort;size
You can use the -F option of lsof to get almost unambiguous output which is machine-parseable with only moderate pain. The output is ambiguous because lsof rewrites newlines in file names to \n.The lsof output consists of one field per line. The first character of each name indicates the field type and the rest of the line is the field value. The fields are: p=PID (only for the first descriptor in a given process), f=descriptor, t=type (REG for regular files, the only type that has a size), s=size (only if available), n=name. The awk code below collects entries that have a size and prints the size and the file name. The rest of the pipelines sorts the output and retains the entry with the largest size.lsof -Fnst | awk '    { field = substr($0,1,1); sub(/^./,); }    field == p { pid = $0; }    field == t { if ($0 == REG) size = 0; else next; }    field == s { size = $0; }    field == n && size != 0 { print size, $0; }' | sort -k1n -u | tail -n42 | sed 's/^[0-9]* //'