2014-11-19 14 views
5

Przychodzę do ciebie z problemem, który mnie zaskoczył. Próbuję znaleźć liczbę wierszy w pliku (w tym przypadku html określonej witryny) dłuższą niż x (która w tym przypadku wynosi 80).Linux Terminal: Znajdowanie liczby linii dłuższych niż x

Na przykład: google.com ma (sprawdzając wc -l) ma 7 linii, z których dwie są dłuższe niż 80 (sprawdzanie z awk "{print NF}"). Próbuję znaleźć sposób sprawdzenia, ile linii jest dłuższych niż 80, a następnie wyprowadzanie tej liczby.

Moje polecenie dotąd wygląda następująco: wget -qO - google.com | awk '{print NF}' | sort -g

Myślałam tylko o liczeniu, które linie mają wartości większe niż 80, ale nie mogę dowiedzieć się, że składni. Być może "awk"? Może robię to w najgorszy możliwy sposób i uderzyłem w ścianę z jakiegoś powodu.

Dzięki za pomoc!

Edytuj: Jednostką miary są znaków. Polecenie powinno być w stanie znaleźć liczbę linii z więcej niż 80 znakami w nich.

+0

Czy oznacza '80' znaki lub' 80' pola? 'To jest test' ma' 15' znaków i '4' pól. – Jotne

Odpowiedz

3

Jeśli chcesz liczbę wierszy, które są dłuższe niż 80 znaków (Twoje pytanie jest brakujące jednostki), grep jest dobrym kandydatem:

grep -c '.\{80\}' 

Więc:

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

wyjścia 6.

+1

Masz rację, zupełnie zapomniałem wspomnieć o jednostkach, które próbowałem wyjaśnić (wydaje mi się, że zadaję pytanie, niezależnie od tego, jak starannie próbuję) zapomnieć o jednej ważnej informacji. W związku z tym 'grep -c' działał jak czar. Próbowałem zrobić kilka nawiasów z "grep". To nie działało dobrze. Dzięki za zwięzłą i skuteczną odpowiedź! – Doestovsky

2

Korzystanie awk:

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

Daje 2 jako wyjście, ponieważ istnieją dwie linie z ponad 80 dziedzin.

Jeśli masz na myśli liczbę znaków (I domniemywać pól w oparciu o to, co masz w pytaniu) a następnie:

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

co daje 6.

+0

Dzięki, to działało również doskonale. Chciałem policzyć "postacie" zamiast "pola", więc dzięki @philbrooksjazz za złapanie tego. Wybrałem odpowiedź gniourfa na twoją, ponieważ 'grep' udaje się osiągnąć to samo, nieco bardziej zwięźle dla moich celów. Dzięki! – Doestovsky

2

Blue Moon's answer (w wersji oryginalnej) wydrukuje liczbę pól, a nie długość linia. Ponieważ domyślnym separatorem pól w awk jest ' ' (spacja), otrzymasz liczbę słów, a nie długość linii.

Spróbuj tego:

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