(1)apacheの設定ファイルを変更する
簡単でうれしいですが、拡張子で絞る以外に方法を知りません。拡張子で絞るのはNGです。
(2)apacheから出されたログを、シェルスクリプト等でn分の1にする。
これが一番現実的。参考シェルスクリプトを教えて下さい。
以上が検討している方法です。
以下のようにしてやればログを5分の1に出来ますが、こんなんで良いでしょうか?
cat access_log | perl -pe'$a=++$a%5;$_=$a==0?$_:""' > access_log2
以下のようにしてやればログを5分の1に出来ますが、こんなんで良いでしょうか?
cat access_log | perl -pe'$a=++$a%5;$_=$a==0?$_:""' > access_log2
ワンライナースクリプトありがとうございます!早速使わせて頂きます。
TransferLog "|usr/bin/sed -n 'n;p' |/usr/local/apache/bin/rotatelogs /usr/local/apache/logs/access_log 86400"
・・・とかいかがでしょうか。
(1)の方法で、ログ出力を外部コマンド任せにしておいて、sed で間引く、という方法になります。
なるほど。勉強になります。ありがとうございます。
シェルスクリプトではありませんが、こんなperlスクリプトではいかがでしょうか? ご希望の処理は6行目だけで後は数値指定ですが。
1 #!/usr/bin/perl
2 use Getopt::Std;
3 getopt('t:o:');
4 $thin = $opt_t || 2;
5 $offset = $opt_o || 0;
6 while (<>) { print if (($. - 1) % $thin == $offset); }
こんな感じです。
ちなみに私だったらめんどくさいのでスクリプト無しでコマンドラインで以下のような感じで使いそうな気がします。:
cat access_log | perl -ne 'print unless($. % 3)' ## 2行おきに表示(1,4,7,…行)
ありがとうございます!使わせて頂きます。
n が4のとき
sed -n 1~4p
あるいは、
#! /usr/bin/env bash n=4 # n行につき、最初の行を出力する l=0 while read ; do l=$((l + 1)) if [ $l -eq 1 ]; then echo "$REPLY"; fi if [ $l -eq $n ]; then l=0; fi done
ありがとうございます。上の方のスクリプトとあわせて使わせて頂きます。
ワンライナースクリプトありがとうございます!早速使わせて頂きます。