Unix下如何提取脚本启动行之间的日志并分别存入对应命名文件
错误原因
- 原命令的多管道拼接逻辑存在设计错误,管道输出的脚本名列表没有被后续awk命令读取,awk直接读取原始日志文件,完全没用到前面的处理结果
- awk代码用单引号包裹时,内部的shell变量
$col不会被解析,无法识别匹配规则 - 你试图用循环匹配的逻辑完全可以用awk单步状态机实现,不需要额外的grep、sed、cut等命令拼接
可行实现方案
直接执行如下awk命令即可:
awk '/Running: / { if (output_file) close(output_file) output_file = $NF next } { print >> output_file }' allreport.txt
命令逻辑说明
- 当匹配到含
Running:的脚本启动行时:先关闭上一个正在写入的文件,避免打开过多文件句柄报错;将当前行的最后一个字段(即脚本名)设为新的输出文件名;跳过当前启动行,不写入任何文件 - 所有非启动行的日志内容,直接追加写入当前的输出文件中
执行效果
执行完成后会生成4个和脚本名同名的文件:
first_script:存储第一个脚本运行期间的2条日志second_script:存储第二个脚本运行期间的2条日志third_script:存储第三个脚本运行期间的2条日志fourth_script:为空文件,对应示例中该脚本启动后无后续日志的情况
内容的提问来源于stack exchange,提问作者Programmer
相关产品推荐
相关产品推荐

