2014-11-19 3 views
5

Я прихожу к вам с проблемой, которая меня озадачила. Я пытаюсь найти количество строк в файле (в данном случае, html определенного сайта) дольше, чем x (что в данном случае равно 80).Linux Terminal: поиск количества строк дольше, чем x

Например: google.com имеет (с помощью wc -l) имеет 7 строк, два из которых длиннее 80 (проверка с помощью awk '{print NF}'). Я пытаюсь найти способ проверить, сколько строк длиннее 80, а затем выводить это число.

Моя команда до сих пор выглядит следующим образом: wget -qO - google.com | awk '{print NF}' | sort -g

Я думал только подсчитывать, какие строки имеют значения больше, чем 80, но я не могу понять, синтаксис для этого. Возможно, «awk»? Возможно, я собираюсь сделать это самым неуклюжим способом и ударился о стену по какой-то причине.

Спасибо за помощь!

Редактировать: Единица измерения символов. Команда должна иметь возможность находить количество строк с более чем 80 символами.

+0

ли вы имеете в виду '80' символы или' 80' поля? 'Это тест' имеет символы' 15' и '4'. – Jotne

ответ

3

Если вы хотите, чтобы количество строк, которые больше, чем 80 символов (ваш вопрос отсутствует единицы), grep является хорошим кандидатом:

grep -c '.\{80\}' 

Итак:

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

выходы 6.

+1

Вы правы, я полностью забыл упомянуть единицы, которые я пытался объяснить (я, кажется, забыл одну важную информацию при задании вопроса, как бы я ни старался). С учетом сказанного «grep -c» работал как шарм. Я пытался сделать некоторое расширение скобки с помощью 'grep'. Это не получилось хорошо. Спасибо за краткий и эффективный ответ! – Doestovsky

2

Использование AWK:

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

Это дает 2 в качестве выходного сигнала, поскольку есть две линии с более чем 80 полей.

Если вы имеете в виду количество символов (я предположил, поля, основанные на том, что у вас есть в этом вопросе), то:

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

который дает 6.

+0

Спасибо, это отлично сработало. Я действительно хотел считать _haracters_, а не _fields_, поэтому благодаря @philbrooksjazz для этого. Я выбрал ответ gniourf на ваш, потому что 'grep' удается выполнить одно и то же немного более сжато для моих целей. Благодаря! – Doestovsky

2

Blue Moon's answer (в оригинальной версии) напечатает количество полей, а не длину линия. Поскольку разделитель полей по умолчанию в awk равен ' ' (пробел), вы получите количество слов, а не длину строки.

Попробуйте это:

wget -q0 - google.com | awk '{ if (length($0) > 80) count++; } END{print count}' 
Смежные вопросы