for x in `cat /var/www/vhosts/example.com/statistics/logs/access_log.processed | awk '{print $1}' | sort | uniq -c | sort -nr | awk {'if ($1 > 2000) print $2'}`;
do
#Works
printf "$x"
#Does not work
printf "$1"
done
2000を超える要求を試みるIPアドレスをブロックしようとしています。実際、上記のコードは2つの部分の組み合わせです。
まず、
cat /var/www/vhosts/example.com/statistics/logs/access_log.processed | awk '{print $1}' | sort | uniq -c | sort -nr
私はすべてのIPアドレスを収集、並べ替え、計算します。以下は例の結果です。
4565 8.8.8.8
3245 7.7.7.7
次に各結果を繰り返し、試行回数が2000を超えていることを確認します。
awk {'if ($1 > 2000) print $2'}
$1
試行回数で、$2
IPです。
soは$2
別の名前で保存され、$x
forループで使用できます。しかし、$1
forループ内でどのように使用できますか?
ベストアンサー1
while
代わりにループを使用for
してawk
。
while read x y; do
echo $y $x
done << EOF
example one
example two
EOF