单条awk命令提取指定网页内容并合并指定行
单条标准awk命令解决方案
直接用这条标准awk命令就能完成需求:
awk '/Downstream Channel Status/{in_target=1} in_target { gsub(/^[[:space:]]+/, "") if (/<tr align='\''center'\''>/) { in_tr=1 line="" next } if (/^<\/tr>/) { in_tr=0 print line next } if (in_tr) { line = line $0 } else if (/<\/table>/) { exit } }' File
工作原理
- 锁定目标表格:一旦匹配到
Downstream Channel Status,就开启in_target标记,只处理这个表格范围内的内容。 - 清理行首空白:对目标区域内的所有行,自动去掉开头的空格、制表符等空白字符,规整内容格式。
- 合并内的内容:
- 碰到
<tr align='center'>时,开启in_tr标记,初始化空变量准备拼接内容,同时跳过当前标签行。 - 碰到
</tr>时,关闭in_tr标记,把拼接好的内容打印出来,再跳过当前标签行。 - 在
in_tr标记生效期间,把每一行的内容持续拼接到同一个变量中,自然移除了换行符。
- 碰到
- 及时终止处理:当匹配到目标表格的结束标签
</table>时,直接退出awk,不再处理后续无关内容。
内容的提问来源于stack exchange,提问作者L3nny5
相关产品推荐
相关产品推荐

