상상하다:

상상하다:

상상하다:

abcd.log.gz라는 파일이 있습니다.

나는 단지 17:30:00부터 18:30:00까지의 파일만 zcat하고 싶습니다.

현재 전체 파일을 zcat합니다. 그런 다음 두 기간 사이의 로그를 확인하면 이 두 기간의 저장 용량이 크고 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 '………' 

관련 정보