设想:

设想:

设想:

我有一个名为 abcd.log.gz 的文件。

我只想 zcat 只从时间段 17:30:00 到 18:30:00 的文件。

目前,我 zcat 了整个文件。然后 awk 两个时间段之间的日志,我认为这两个时间段的存储量很大,我必须继续执行rm命令,这是不必要的风险。

用于计算两个持续时间之间的日志的脚本。

#!/bin/bash

# Check if three arguments are provided
if [ "$#" -ne 3 ]; then
    echo "Usage: $0 <beg_time> <end_time> <log_file>"
    exit 1
fi

beg=$1
end=$2
log_file=$3

LC_ALL=C awk -v beg="$beg" -v end="$end" '
  match($0, /[0-2][0-9]:[0-5][0-9]:[0-5][0-9]/) {
    t = substr($0, RSTART, 8)
    if (t >= end) selected = 0
    else if (t >= beg) selected = 1
  }
  selected' "$log_file"

答案1

不,zcat整个文件的存储量并不大(除非您将完整输出写入文件,这不是您使用 zcat 的目的)。

因此,只需将 zcat 输出通过管道传输到 awk,而不是先写入文件然后读取该文件。

zcat "$log_file_gzipped" | awk '………' 

相关内容