如何用Awk输出特定表达式后仅含数字的下一行
解决Awk命令仅输出“lol”后纯数字下一行的问题
问题场景
现有test.txt文件内容如下:
sometext someothertext ... lol 74 hhhhh lol 789AA
需求:仅输出“lol”之后仅包含纯数字的下一行,预期输出为:
74
现有尝试及问题
执行以下Awk命令:
awk '$0 == "lol" {i=1;next};i && i++ <= 1' test.txt
实际输出为:
74 789AA
该命令仅实现了输出“lol”后的第一行,但未过滤纯数字的要求,导致不符合预期。
修改后的Awk命令
awk '$0 == "lol" {flag=1; next} flag && /^[0-9]+$/ {print; flag=0}' test.txt
命令逻辑说明
- 当匹配到内容为
lol的行时,设置标记flag=1并跳过当前行 - 当
flag为1时,用正则^[0-9]+$检查当前行是否为纯数字(从行首到行尾仅包含数字):- 符合条件则打印该行,并将
flag重置为0,避免匹配后续其他lol后的行 - 不符合条件则直接跳过,标记不会重置,直到遇到下一个
lol行
- 符合条件则打印该行,并将
这样处理后,只会输出第一个lol后的纯数字行,第二个lol后的789AA因包含字母无法通过正则匹配,不会被输出。
内容的提问来源于stack exchange,提问作者ailauli69
相关产品推荐
相关产品推荐

