Как извлечь текст из результатов awk? - PullRequest
2 голосов
/ 08 июня 2019

Эта команда возвращает всю строку, в которой найдено слово «About».

! lynx -source google.com/search?q=india | awk '/About */'

Это вернет что-то вроде этого ...

<div id=gbar><nobr><b class=gb1>Search</b> <a class=gb1 href="http://www.google.com/search?hl=en&tbm=isch&source=og&tab=wi">Images</a> <a class=gb1 href="http://maps.google.com/maps?hl=en&tab=wl">Maps</a> <a class=gb1 href="https://play.google.com/?hl=en&tab=w8">Play</a> <a class=gb1 href="http://www.youtube.com/results?gl=US&tab=w1">YouTube</a> <a class=gb1 href="http://news.google.com/nwshp?hl=en&tab=wn">News</a> <a class=gb1 href="https://mail.google.com/mail/?tab=wm">Gmail</a> <a class=gb1 href="https://drive.google.com/?tab=wo">Drive</a> <a class=gb1 style="text-decoration:none" href="https://www.google.com/intl/en/about/products?tab=wh"><u>More</u> &raquo;</a></nobr></div><div id=guser width=100%><nobr><span id=gbn class=gbi></span><span id=gbf class=gbf></span><span id=gbe></span><a href="http://www.google.com/history/optout?hl=en" class=gb4>Web History</a> | <a  href="/preferences?hl=en" class=gb4>Settings</a> | <a target=_top id=gb_70 href="https://accounts.google.com/ServiceLogin?hl=en&passive=true&continue=http://www.google.com/search%3Fq%3Dindia" class=gb4>Sign in</a></nobr></div><div class=gbh style=left:0></div><div class=gbh style=right:0></div><font size="-2"><br clear="all"></font><table border="0" cellpadding="3" cellspacing="0"><tr><td valign="top"><a href="/webhp?hl="><img src="/images/branding/searchlogo/1x/googlelogo_desk_heirloom_color_150x55dp.gif" height="55" width="150" border="0"></a></td><td valign="bottom"><nobr><form name="gs" method="GET" action="/search"><input type="text" name="q" maxlength="2048" title="Search" value="india" size="41"><font size="-1">&nbsp;</font><input type="Submit" name="btnG" value="Search"><font size="-1">&nbsp;</font></form></nobr></td><td width="100%" valign="middle"><nobr><font size="-2"><a href="/advanced_search?q=india&amp;hl=">Advanced Search</a><br><a href="/preferences?q=india&amp;hl=">Preferences</a></font></nobr></td></tr></table><table width="100%" border="0" cellpadding="0" cellspacing="0"><tr><td bgcolor="#3366CC" height="1"><img height="1" width="1" alt=""></td></tr></table><table width="100%" border="0" cellpadding="0" cellspacing="0" bgcolor="#D5DDF3"><tr><td><img height="2" width="1" alt=""></td></tr><tr><td><table width="100%" border="0" cellpadding="0" cellspacing="4"><tr><td nowrap><font size="-1"><strong>Web</strong></font></td><td nowrap align="right"><font size="-1">About 10,730,000,000 results (<b>0.34</b> seconds)</font></td></tr></table></td></tr><tr><td><img height="1" width="1" alt=""></td></tr></table><p><a href="/url?q=https://en.wikipedia.org/wiki/India&amp;sa=U&amp;ved=2ahUKEwiih9Hri9niAhWvuVkKHXWUCLkQFjAAegQIDBAH&amp;usg=AOvVaw2q-I4x7L6MSaWE9ziLkwjR"><b>India</b> - Wikipedia</a><table cellpadding="0" cellspacing="0" border="0"><tr><td class="j"><font size="-1"><b>India</b> (ISO: Bh&#257;rat), also known as the Republic of <b>India</b> (ISO: Bh&#257;rat Ga&#7751;ar&#257;jya), <br>

Но я хочу вернутьсятолько количество результатов.например,

Ожидаемый результат:

Около 7 970 000 000 результатов

(или только число без слов, как О)

Что яя на самом деле ищу, чтобы вернуть количество запятых в подсчете.Например, в приведенном выше примере есть 3 запятых, это означает, что счетчик «очень высокий», а если нет, (менее 1000 результатов) счетчик должен вернуть «низкий».

Ответы [ 4 ]

3 голосов
/ 08 июня 2019

Используйте -dump вместо -source. Это исключает HTML-коды:

$ lynx -dump google.com/search?q=india | awk -F, '/About/'
   Web About 7,410,000,000 results (0.33 seconds)

Чтобы напечатать только номер:

$ lynx -dump google.com/search?q=india | awk '/About/{print $3}'
7,410,000,000

Чтобы напечатать только количество запятых:

$ lynx -dump google.com/search?q=india | awk -F, '/About/{print NF-1}'
3
2 голосов
/ 08 июня 2019

Если вы просто хотите, чтобы количество запятых в числе, вы можете использовать:

pax> echo 'About 7,970,000,000 results' | awk '/About/{gsub(/[^,]/,"",$0);print length($0)}'
3

Более подробно:

/About/                - select line with "About"
gsub(/[^,]/,"",$0)     - replace all non-commas with nothing in whole line
print length($0)       - print out count of the commas

Имейте в виду, что это только если выходLynx точно , что вы изначально заявили (как в моем echo, что, как оказалось, не так).

Для вывода фактического (HTML), вероятно, будет больше запятых, чем вы ожидали.В этом случае вам нужно вычеркнуть все до About и все из следующего пробела после этого (оставив только число), затем посчитать запятые в этом бите.

Следующее, кажется, хорошо работает с вашим фактическим запросом, первые две команды gsub убирают все, кроме самой цифры, а остальные - то, что я выдвинул выше:

awk '/About /{
       gsub(/^.*About /,"",$0);
       gsub(/ .*$/,"",$0);
       gsub(/[^,]/,"",$0);
       print length($0)}'
2 голосов
/ 08 июня 2019

Используйте grep intead of awk.Опция -o будет просто печатать часть строки, которая соответствует регулярному выражению, вместо всей строки.

lynx -source google.com/search?q=india | grep -o 'About [0-9,]+ results'
1 голос
/ 08 июня 2019

Это должно быть довольно легко сделать с помощью выражения, похожего на:

([0-9,]+)

и для запятых мы бы просто использовали:

(,)

Демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...