コマンドの結果を、for 文で処理する

コマンドの結果を配列受け取って処理する

lsの結果を変数に代入して、その変数をfor文で処理する方法を初回します。以下ではFindの結果をFor文で処理しています

#!/bin/bash

flist=`find /etc/httpd/conf.d -type f`

for a in $flist; do
    echo $a
done

 

使い方が色々ありますが、以下のサンプルでは、apacheのログファイルでアクセス数が多いIPアドレスを上位10個を集計しています。

集計するファイルを「/etc/httpd/logs」にある過去のログも含めた「access_log」を対象していて、過去のファイルも含む場合は、「ls /etc/httpd/logs/|grep “^access_log"」で取得しています。

IPアドレスの上位10個は「cat <ファイル名> | cut -f 1 -d ' ' | sort | uniq -c | sort -nr | head -10」で集計しています。

#!/bin/bash

LOGDIR=/etc/httpd/logs
ASLOG=`ls /etc/httpd/logs/|grep "^access_log"`

for a in $ASLOG; do
  cat $LOGDIR/$a | cut -f 1 -d ' ' | sort | uniq -c | sort -nr | head -10
done

スポンサーリンク