It sounds like you want either a voxel-based thinning or maybe a Poisson-based one. PDAL can do either. See PDAL's tutorial on the topic at http://www.pdal.io/tutorial/dart-throwing.html [![PDAL sampling][1]][1].

As far as the size of the file, please define "large". Just about any technique except simple rank decimation (remove n-th points) is going to want to have access to the entire file in memory. Other options would require a more sophisticated two-stage index+sampling technique to avoid that requirement.

  [1]: https://i.sstatic.net/L3UGB.png