You can use a regexp to find such lines with the normal search function:
/\v(\|[^|]*){21,}
The \v makes sure the regexp works regardless of the value of the magic option (it makes all non-alphanumeric characters (except underscore) special; I also use it here to avoid having to put backslashes before the (, ), {, and }).
If you want to see all such lines at once, then you can combine it with the :g command:
:g/\v(\|[^|]*){21,}/p
Incidentally, this type of command (from the ex predecessor to vi) is the origin for the name of the grep tool (g/re/p: re short for regexp).
If your source data is “pipe delimited”, then you should probably check to see if any of the values have embedded pipe characters (maybe done by escaping (e.g. prefixed with a backslash), doubling, or quoting). The regexp method above can be extended to cover most escaping and doubling methods, but parsing quoted values usually requires power expressive power than most regexp languages can offer.