Soluzione Perl:
perl -ne 'print if tr/,// > 4'
-n
legge il file riga per riga- l'operatore tr restituisce il numero di corrispondenze.
Per stampare le righe con meno di 4, basta cambiare >
a <
.
Usando il grep
comando:
grep -E '(,.*){5}' myfile
fa il lavoro. Spiegazione:
-E
:usa una Regex estesa...
'(,.*)
:... per trovare una virgola seguita da un numero qualsiasi di caratteri, anche zero...
{5}'
:... e ripeti lo schema precedente 5 volte.
Se vuoi eseguire il grep delle righe con meno di 4 virgole, avrai bisogno di:
grep -xE '([^,]*,){0,3}[^,]*' myfile
Questa volta abbiamo bisogno di -x
quindi il modello è ancorato sia all'inizio che alla fine della linea in modo che corrisponda alla linea completa. E usiamo [^,]*
invece di .*
poiché quest'ultimo corrisponderebbe altrimenti alle stringhe contenenti ,
s come .
corrisponde a qualsiasi carattere.
Un altro approccio è invertire con -v
l'approccio precedente. "Meno di 4" equivale a non "almeno 4", quindi:
grep -vE '(,.*){4}' myfile
Il awk
versione:
awk -F, 'NF > 5' myfile