设想:
我有一个名为 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 '………'