2014-11-19 16 views
5

Vengo da voi con un problema che mi ha bloccato. Sto cercando di trovare il numero di righe in un file (in questo caso l'html di un determinato sito) più lungo di x (che, in questo caso, è 80).: trovare il numero di linee più lunghe di x

Ad esempio: google.com ha (controllando con wc -l) ha 7 righe, due delle quali sono più lunghe di 80 (controllare con awk '{print NF}'). Sto cercando di trovare un modo per verificare quante righe sono più lunghe di 80 e quindi di emettere quel numero.

mio comando sembra finora in questo modo: wget -qO - google.com | awk '{print NF}' | sort -g

pensavo solo contando che le linee hanno valori superiori a 80, ma io non riesco a capire la sintassi per questo. Forse 'awk'? Forse sto andando in questo modo più clamoroso possibile e ho colpito un muro per una ragione.

Grazie per l'aiuto!

Modifica: l'unità di misura è caratteri. Il comando dovrebbe essere in grado di trovare il numero di linee con più di 80 caratteri al loro interno.

+0

vuoi dire '80' caratteri o' 80' campi? 'Questo è un test' ha caratteri' 15' e campi '4'. – Jotne

risposta

3

Se si desidera che il numero di linee che sono più di 80 caratteri (la tua domanda manca unità), grep è un buon candidato:

grep -c '.\{80\}' 

Quindi:

wget -qO - google.com | grep -c '.\{80\}' 

uscite 6.

+1

Hai ragione, ho completamente dimenticato di menzionare le unità che stavo cercando di rendere conto (mi sembra di dimenticare una informazione cruciale quando faccio una domanda, non importa quanto mi stia attento). Detto questo, 'grep -c' ha funzionato come un incantesimo. Stavo cercando di eseguire un po 'di espansione con 'grep'. Non ha funzionato bene. Grazie per la risposta concisa ed efficiente! – Doestovsky

2

Uso awk:

wget -qO - google.com | awk 'NF>80{count++} END{print count}' 

Questo dà come output 2 quanto vi sono due linee con più di 80 campi.

Se vuoi dire numero di caratteri (I campi in base a ciò che avete in questione presunta) poi:

wget -qO - google.com | awk 'length($0)>80{c++} END{print c}' 

che dà 6.

+0

Grazie, anche questo ha funzionato alla perfezione. Volevo contare i _ personaggi anziché i _fields_, quindi grazie a @philbrooksjazz per averlo capito. Ho scelto la risposta di gniourf sulla tua perché 'grep' riesce a realizzare la stessa cosa in modo un po 'più conciso per i miei scopi. Grazie! – Doestovsky

2

Blue Moon's answer (nella versione originale) stamperà il numero di campi, non la lunghezza del Linea. Poiché il separatore di campo predefinito in awk è ' ' (spazio), otterrai un conteggio delle parole, non la lunghezza della linea.

Prova questo:

wget -q0 - google.com | awk '{ if (length($0) > 80) count++; } END{print count}' 
Problemi correlati