Solution Perl :
perl -ne 'print if tr/,// > 4'
-n
lit le fichier ligne par ligne- l'opérateur tr renvoie le nombre de correspondances.
Pour imprimer les lignes avec moins de 4, il suffit de changer >
à <
.
Utilisation du grep
commande :
grep -E '(,.*){5}' myfile
Fait le travail. Explication :
-E
:utilisez une expression régulière étendue...
'(,.*)
:... pour trouver une virgule suivie d'un nombre quelconque de caractères, même zéro...
{5}'
:... et répétez le motif précédent 5 fois.
Si vous voulez grep des lignes avec moins de 4 virgules, vous aurez besoin de :
grep -xE '([^,]*,){0,3}[^,]*' myfile
Cette fois, nous avons besoin de -x
le motif est donc ancré au début et à la fin de la ligne afin qu'il corresponde à la ligne complète. Et nous utilisons [^,]*
au lieu de .*
car ce dernier correspondrait autrement avec bonheur aux chaînes contenant ,
s comme .
correspond à tout caractère.
Une autre approche consiste à inverser avec -v
l'approche précédente. "Moins que 4" équivaut à pas "au moins 4", donc :
grep -vE '(,.*){4}' myfile
Le awk
version :
awk -F, 'NF > 5' myfile