È noto che i programmi con interfaccia grafica sono più comodi da usare, perché sono progettati per requisiti elevati, e in più il terminale permette di risolvere certi compiti molto più velocemente. Esiste quindi l'utility wc, in grado di contare il numero di righe di un file. Il numero di righe non dice molto, ma nel caso in cui vengano combinati diversi comandi, è possibile contare le righe, tenendo conto dei parametri necessari. Come contare le righe in un file Linux? Vediamo un paio di esempi semplici ma efficaci di utilizzo dei comandi grep, sed e awk.
Abbiamo già visto il comando WC, ora dovremmo familiarizzare con uno dei suoi parametri chiave -l
. Conta le transizioni a una nuova riga, cioè viene contata l'intera riga, comprese le righe vuote. Il comando svolge il compito più velocemente di tutti gli altri, ma solo alcune stringhe sono possibili, con una determinata condizione.
$ wc -l name_file
$ grep -c $ name_file
$ sed -n $= name_file
$ awk 'END{ print NR }' name_file
Come si vede, il risultato è lo stesso, ma il comando wc ha impiegato meno tempo per completare l'operazione. Gli altri comandi sono applicabili a query complesse. Il comando grep consente di trovare stringhe di solo testo: grep -c 'testo' nome_file
.
$ grep -c 'text' file_name
Il comando grep gestisce le espressioni regolari, per cui è possibile combinare più condizioni AND, OR, NOT.
Quando sed esegue l'elaborazione del testo, è molto più semplice eseguire un conteggio finale delle righe con il comando wc. È possibile eliminare tutte le righe che sono lunghe meno di tre caratteri. e i casi complessi vengono contati senza commenti.
$ sed -r '/^.{,3}$/d' file_name | wc -l
Se l'operazione è semplice, può essere eseguita in altri modi. Il comando awk sarà più semplice e comprensibile.
$ awk 'length >3' file_name | wc -l
Per un esempio visivo del comando awk, eseguiamo il conteggio delle stringhe durante la ricerca del valore richiesto nel file di tabella csv.
Nell'esempio, contiamo il numero di righe con il valore del secondo parametro superiore a 50.
$ awk '$2+0 > 50' file_name | wc -l
Aggiungere 0 all'espressione per rimuovere tutte le espressioni non numeriche.