Linux终端:查找长度大于x的行数

5
我向您提出一个让我困惑的问题。我试图找到文件(在这种情况下是某个网站的HTML)中长度大于x(在这种情况下为80)的行数。

例如:通过使用“wc -l”检查,google.com有7行,其中有两行的长度超过80(使用“awk '{print NF}'”进行检查)。我正在尝试找到一种方法来检查有多少行的长度超过80,并输出该数字。

到目前为止,我的命令如下: wget -qO - google.com | awk '{print NF}' | sort -g

我想只计算值大于80的行数,但我无法弄清楚语法。也许可以使用'awk'?也许我正在以最拙劣的方式处理此事并且已经遇到了障碍。

谢谢您的帮助!

编辑:度量单位是字符。该命令应能够找到具有超过80个字符的行数。

你是指“80”个字符还是“80”个字段?“This is a test”有“15”个字符和“4”个字段。 - Jotne
3个回答

5
如果你想要查找长度超过80个字符的行数(你的问题缺少单位),grep 是一个不错的选择:
grep -c '.\{80\}'

那么:

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

输出结果为6。


1
你说得对,我完全忘记提到我试图解决的单位(似乎无论我多么小心询问问题,我总是会忘记一个关键信息)。话虽如此,grep -c 的效果非常好。我曾试图用 grep 进行一些花括号扩展,但结果不尽人意。感谢你简明高效的回答! - Doestovsky
1
如果我没搞错,'.\{80\}'匹配80个或更多字符的行,所以这里应该是'.\{81\}' - Ana Borges
@ana-borges:你说得对!(更多的英文是在严格意义上) - gniourf_gniourf

3

Blue Moon的答案(原始版本)将打印字段数,而不是行的长度。由于awk中的默认字段分隔符是' '(空格),因此您将获得单词计数,而不是行的长度。

请尝试以下内容:

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

2

使用awk:

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

由于有两行超过80个字段,因此输出结果为2

如果您指的是字符数(我根据问题中的内容推测了字段),那么:

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

这将返回6


谢谢,这个也完美地解决了我的问题。我确实想要计算字符而不是字段,所以感谢@philbrooksjazz指出这一点。我选择了gniourf的答案,因为对于我的目的来说,grep可以更简洁地完成相同的事情。谢谢! - Doestovsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接