如何用Awk提取Bash中匹配指定模式后的第2个单词?
使用Awk提取指定模式后第2个单词的方法
直接用下面的Awk命令就能实现需求:
awk '{for(i=1;i<=NF;i++){if($i=="PATTERN" && i+2<=NF) print $(i+2)}}' input.txt
命令解释
NF是Awk的内置变量,表示当前行的字段总数,用for循环遍历每一行的每个字段- 当遍历到字段
$i等于指定的PATTERN时,先判断i+2是否不超过当前行的字段数(防止索引越界报错) - 满足条件就输出
$(i+2),也就是PATTERN所在位置之后的第2个单词
针对你的示例测试
假设你的示例文本保存在input.txt中,运行上述命令后,会输出:
PRINT_THIS PRINT_THIS PRINT_THIS PRINT_THIS
完全符合你的期望。
扩展:支持正则匹配模式
如果你的PATTERN需要用正则表达式匹配(比如匹配包含特定字符的字段),把判断条件改成正则匹配即可:
awk '{for(i=1;i<=NF;i++){if($i ~ /PATTERN/ && i+2<=NF) print $(i+2)}}' input.txt
内容的提问来源于stack exchange,提问作者BeatONE
相关产品推荐
相关产品推荐

