MST

星途 面试题库

面试题:Bash中pr命令结合其他工具处理复杂文本需求

给定一个具有不规则格式的日志文件log.txt,其中每行日志开头是时间戳(格式为YYYY - MM - DD HH:MM:SS),接着是一些不同长度的描述信息。现在需要使用pr命令结合其他必要的Bash工具,将日志文件按日期分页显示,并且在每页顶部显示该页日志对应的日期,同时保证描述信息的可读性,你会如何设计Bash脚本?
43.8万 热度难度
编程语言Bash

知识考点

AI 面试

面试题答案

一键面试
#!/bin/bash

while read line; do
    date=$(echo $line | cut -d' ' -f1)
    echo -e "\f$date"
    echo $line
    while read subline; do
        subdate=$(echo $subline | cut -d' ' -f1)
        if [ "$subdate" == "$date" ]; then
            echo $subline
        else
            break
        fi
    done
done < log.txt | pr -T -l 50 -h "$(date +%Y-%m-%d)"

解释:

  1. while read line 逐行读取日志文件 log.txt
  2. 使用 cut -d' ' -f1 提取每行开头的日期。
  3. echo -e "\f$date" 输出分页符 \f 并打印当前日期作为页头。
  4. 内部 while 循环继续读取后续行,直到日期改变,这样就把同一天的日志都放在了一起。
  5. 最后通过 pr 命令对输出进行分页处理,-T 表示不显示页眉页脚,-l 50 设置每页50行,-h "$(date +%Y-%m-%d)" 设置页眉为当前日期。