2012-04-19 21 views
77
wc -l file.txt 

numero di righe e nome file in uscita.Come ottenere "wc -l" per stampare solo il numero di righe senza nome file?

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

posso fare questo

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

Ma forse c'è un modo migliore?

+10

' wc -l

+0

Possibile duplicato di [ottenere solo il numero intero da wc in bash] (http://stackoverflow.com/questions/3746947/get-just-the-integer-from-wc-in-bash) –

risposta

126

provare in questo modo:

wc -l < file.txt 
+1

In AIX, ksh, questo avrà sempre uno spazio che precede il numero. Dobbiamo usare | awk '{print $ 1}' o un taglio, per tagliare gli spazi. Un altro modo per tagliare sarebbe racchiudere un eco. – rao

+0

@rao è corretto, questo aggiungerà uno spazio prima del numero. La mia soluzione risolve questo problema ed è più semplice di awk o cut. –

+0

@rao Non c'è spazio con bash. Da dove viene lo spazio in ksh? 'wc -l' non dovrebbe emetterne uno, e perché ksh anteporrebbe l'output standard di un programma a uno spazio? –

15
cat file.txt | wc -l 

Secondo the man page (per la versione BSD, non ho una versione di GNU per controllare):

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

+2

Non mi piace il gatto - La concatenazione consuma molto tempo. – PoGibas

+8

'wc -l pjmorse

+0

@user: testalo. Di gran lunga la parte più lenta sarà la lettura del file dal disco. – sarnold

8

Come su

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

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

+3

questo non è migliore del 'wc -l file.txt | awk '{print $ 1}' 'OP provato. – doubleDown

+0

Più veloce del metodo 'wc -l

4

Che dire di

grep -ch "^" file.txt 
+1

Bello. Uso molto originale/creativo di 'grep', ma verificando questo risulta (non sorprendentemente) essere da 2x a 6x più lento del metodo' wc' più semplice/semplice nei miei test. – arielf

7

di fare questo senza lo spazio iniziale, perché non:

wc -l < file.txt | bc 
+0

Ottengo errori di sintassi con questo (Ubuntu 14.04). Penso che ci sia un problema con il nome del file. – MERose

+0

Su un RHEL 6.7 solleva errori: $ wc -l file.csv | bc (standard_in) 1: errore di sintassi (standard_in) 1: carattere illegale: N (standard_in) 1: errore di sintassi (standard_in) 1: errore di sintassi –

+1

Inoltre ottengo un errore di analisi, ma è possibile combinare questo con il altra risposta per usare 'wc -l jangosteve

2

Ovviamente, ci sono un sacco di soluzioni a questo. Ecco un altro uno, però:

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

Emette solo il numero di linee, ma il carattere di fine riga (\n) è presente, se non si vuole che sia, sostituire [:blank:] con [:space:].

0

modo migliore sarebbe prima di tutto trovare tutti i file nella directory quindi utilizzare AWK NR (numero di record Variabile)

sotto è il comando:

find <directory path> -type f | awk 'END{print NR}' 

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

Problemi correlati