想像する:

想像する:

想像する:

abcd.log.gzというファイルがあります。

私は17:30:00から18:30:00までのファイルだけzcatしたいと思います。

現在のファイル全体をzcatします。その後、2つの期間の間のログを調べると、これら2つの期間の記憶容量が大きく、rmコマンドを実行し続ける必要があります。これは不要なリスクであると思います。

2 つの期間の間のログを計算するスクリプトです。

#!/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 '………' 

おすすめ記事