MST
星途 面试题库

面试题:Bash正则表达式与文本性能优化处理

给定一个非常大的文本文件`large.txt`(大小可能超过1GB),其内容为大量的日志记录,格式为`时间戳|日志级别|日志信息`,例如`2023 - 10 - 01 12:00:00|INFO|系统正常运行`。要求编写一个Bash脚本,使用正则表达式快速筛选出所有`ERROR`级别的日志信息,并输出到新文件`error_log.txt`中,同时要保证脚本在处理大文件时的性能最优,说明你采取的优化措施及原因。
22.3万 热度难度
编程语言Bash

知识考点

AI 面试

面试题答案

一键面试
#!/bin/bash

# 使用awk命令筛选ERROR级别的日志信息并输出到error_log.txt
awk -F '|' '$2 == "ERROR" {print $0}' large.txt > error_log.txt

优化措施及原因

  1. 选择awkawk是专门用于文本处理的工具,对于这种按字段分隔并基于字段内容筛选的任务非常高效。它逐行读取文件,不需要将整个大文件加载到内存中,因此在处理大文件时能有效减少内存占用,提高性能。
  2. 字段分隔符设置:通过-F '|'指定|为字段分隔符,这样可以方便地通过字段编号(如$2表示第二个字段)来获取日志级别,避免了复杂的字符串处理,提高处理速度。
  3. 逐行处理awk默认逐行处理文本,处理完一行后就释放相关内存,对于超大文件的处理极为友好,不会因内存耗尽导致程序崩溃。