The join(1) command is designed to do exactly this:
join -a2 -t: <(sort .nls) <(ls | sort)
(I think this is different from your pipeline, in that your pipeline will print files in .nls that aren't actually in the directory.)
join -a2 -t: <(sort .nls) <(ls | sort)
(I think this is different from your pipeline, in that your pipeline will print files in .nls that aren't actually in the directory.)