想像する:
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 '………'