2017-11-13 5 views
0

私のプロキシからFacebookに接続した情報を取得する必要があります。私は2つのループを持っています。bashのカウンタをファイルに別の文字列を追加する方法に変更する

#i have format og logs, like squid.log.12.10.2017 
#with `ls squid.log*` i am working with all squid logs, day by day 
for i in `ls squid.log*`; do 
    echo "There is log $i, that we need to check" 
    #i am getting count of ip addresses, that were on fb.com and i am writing them to ~/temp_cache 
    # like this: 
    # 25 192.168.110.5 
    # 41 192.168.110.2 
    # where 192.168.110.5 have connected to fb.com 25 times 
    # and 192.168.110.2 have connected to fb.com 41 times 
    zgrep fb.com /var/log/$i | cut -d " " -f1 | sort | uniq -c | sort -n -k 1 >> ~/temp_cache 

    #i am getting only list of ip, without count of connections to facebook 
    # like this: 
    # 192.168.110.5 
    # 192.168.110.2 
    ip=$(zgrep fb.com /var/log/$i | cut -d " " -f1 | sort | uniq -c | sort -n -k 1 | awk '{print $2}') 
    for y in $ip; do 
     echo "Users from $y:" 
     # i have system, that we are using for projects, in this system we have log ip-addresses and logins, from these ip addresses 
     # like for this ip 192.168.110.5, i am getting name of user duke 
     # main result, like this: 
     # duke 
     # the_rock 
     redmine_users=$(tail -n 500000 /usr/share/redmine/log/production.log | grep -A 3 "$y" | grep "Current user" | awk '{print $3}' | head -n 1) 

     # i am appending to lines, name of users for these lines 
     # in a result it should be like this: 
     # 25 192.168.110.5 duke 
     # 41 192.168.110.2 the rock 
     counter=$((counter+1)) 
     sed -i "$counter s|$| $redmine_users |" ~/temp_cache 
    done 
    # Delimiter for each day of logs 
    echo "------------------------------------------------" >> ~/temp_cache 
done 

最初に見てもらえます。しかし、それは1日だけ動作します。このスクリプトは、2番目のログに起こっている場合は、私はsquid.log.13.10.2017を意味し、それはこのようなものを作る:

 25 192.168.110.5 duke 
     41 192.168.110.2 the rock 
     ______________________________ hogan 
     33 192.168.110.1 

しかし、私はこれをしたい:

 25 192.168.110.5 duke 
     41 192.168.110.2 the rock 
     ______________________________ 
     33 192.168.110.1 hogan 

私は、一日のために、手動でスクリプトを実行しようとしましたライン______________________________をexistsingと

 counter=$((counter+1)) 
     sed -i "$counter s|$| $redmine_users |" ~/temp_cache 

を変更すると

しかし、私が持っている結果で:

少なくとも、私が欲しいものを、行うにはどのように
 ______________________________ 
     25 192.168.110.5 duke the rock 
     41 192.168.110.2 

この構造でカウンタを変更する方法
 ______________________________ 
     25 192.168.110.5 duke 
     41 192.168.110.2 the rock 

 counter=$((counter+1)) 
     sed -i "$counter s|$| $redmine_users |" ~/temp_cache 

答えて

0

私が正しく理解していれば、あなたはそれを取得しようとしているので、その名前はカウントとipと同じ行にありますか?

これが正しいと仮定すれば、----を追加した後にカウンタを増やすだけでなく、現在の位置も増やす必要があります。

私はコードに他にも複数の問題がありますが、これは主な質問に答えると思います。私はマークを逃した場合私に教えてください?

0

が見つかりました。カウンタは最初のループに入るはずです。注目に感謝

関連する問題