Soluzione Perl:
perl -ne 'print if tr/,// > 4'
-nlegge 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