MST

星途 面试题库

面试题:Bash管道与命令替换的优化及并发处理

在一个包含大量子目录的项目目录下,每个子目录都有一个`log.txt`文件。要求使用Bash的管道和命令替换,并发统计每个`log.txt`文件中特定关键字(假设为`error`)出现的次数,最后汇总并输出所有子目录中该关键字出现的总次数。同时,要考虑如何优化性能,避免资源耗尽。
20.4万 热度难度
编程语言Bash

知识考点

AI 面试

面试题答案

一键面试
# 使用find命令查找所有log.txt文件,xargs以并行方式处理每个文件
total_count=$(find . -name "log.txt" -print0 | xargs -0 -P $(nproc) grep -o "error" | wc -l)
echo "关键字error出现的总次数: $total_count"

解释:

  1. find . -name "log.txt" -print0:在当前目录及其所有子目录中查找名为log.txt的文件,并以null字符分隔输出。
  2. xargs -0 -P $(nproc)xargs读取find命令的输出,-0选项表示输入是以null字符分隔的,-P $(nproc)表示使用与CPU核心数相同的并行度来处理文件,$(nproc)获取系统的CPU核心数。
  3. grep -o "error":在每个文件中查找关键字error-o选项表示只输出匹配的关键字。
  4. wc -l:统计匹配的关键字行数,即关键字出现的总次数。
  5. 将总次数赋值给total_count变量,并输出结果。这样的处理方式可以有效利用系统资源,提高性能,避免资源耗尽。