如何通过单行Shell命令提取Hive日志中Parsing command后的SQL语句
提取Hive日志中"Parsing command:"后的SQL语句(单行命令实现)
当然可以!你完全能用一行命令实现这个需求,只需要在现有命令基础上搭配文本处理工具,比如sed或awk就能轻松过滤出你要的SQL内容。下面是几个实用的方案:
方案1:使用grep + sed组合
这个方案先过滤出包含目标字符串的行,再通过sed替换掉冒号前的所有内容:
tail -f /var/log/hive/hiveserver2.log | grep "Parsing command" | sed 's/.*Parsing command: //'
解释:sed的s/.*Parsing command: //是替换规则,.*会匹配Parsing command:之前的所有字符(包括日志时间、进程信息等),将其替换为空字符串后,剩下的就是你需要的SQL语句了。
方案2:使用grep + awk组合
awk可以指定自定义分隔符,这里我们把Parsing command:作为分隔符,直接提取分隔后的第二部分内容:
tail -f /var/log/hive/hiveserver2.log | grep "Parsing command" | awk -F 'Parsing command: ' '{print $2}'
解释:-F 'Parsing command: '设置分隔符,$2代表分隔后的第二个字段,也就是冒号后面的SQL语句。
方案3:一步到位(无需单独grep)
其实sed本身就具备过滤行的能力,这样可以少用一个管道命令,更简洁:
tail -f /var/log/hive/hiveserver2.log | sed -n '/Parsing command/s/.*Parsing command: //p'
解释:-n表示只输出我们指定的行;/Parsing command/用来过滤出包含目标字符串的行;最后执行替换并打印(p)处理后的内容。
如果你的Hive日志中Parsing command:后的SQL语句都是单行的,上面的方案都能完美工作。如果遇到跨行的SQL日志,可能需要稍微调整命令,但一般Hive的这条日志都是单行记录的。
内容的提问来源于stack exchange,提问作者HP.
相关产品推荐
相关产品推荐

