Come ottenere “wc -l” per stampare solo il numero di righe senza nome file?

wc -l file.txt 

emette il numero di linee e il nome del file.

Ho bisogno solo del numero stesso (non del nome del file).

posso farlo

  wc -l file.txt | awk '{print $1}' 

Ma forse c’è un modo migliore?

Prova in questo modo:

 wc -l < file.txt 
 cat file.txt | wc -l 

Secondo la pagina man (per la versione BSD, non ho una versione GNU da verificare):

Se non vengono specificati file, viene utilizzato l’input standard e non viene visualizzato alcun nome file. Il prompt accetterà input fino a ricevere EOF o [^ D] nella maggior parte degli ambienti.

Che ne dite di

 wc -l file.txt | cut -d' ' -f1 

cioè pipe l’output di wc in cut (dove i delimitatori sono spazi e scegli solo il primo campo)

Per fare questo senza lo spazio principale, perché no:

 wc -l < file.txt | bc 

Che ne dite di

 grep -ch "^" file.txt 

Ovviamente, ci sono molte soluzioni a questo. Eccone un altro però:

wc -l somefile | tr -d "[:alpha:][:blank:][:punct:]"

Questo produce solo il numero di linee, ma il carattere di fine riga finale ( \n ) è presente, se non lo vuoi, sostituisci [:blank:] con [:space:] .

Il modo migliore sarebbe prima di tutto trovare tutti i file nella directory quindi utilizzare AWK NR (Numero di record variabile)

di seguito è il comando:

 find  -type f | awk 'END{print NR}' 

esempio: – find /tmp/ -type f | awk 'END{print NR}' find /tmp/ -type f | awk 'END{print NR}'