簡體   English   中英

如何使用不同目錄中的 bash 腳本從多個文件中獲取數據 HTTP 響應代碼 5xx

[英]How to get data HTTP response code 5xx from multiple files with bash script in different directory

我正在學習 bash 腳本,但我可能需要一些示例:am 有 2 個或更多文件,目錄 /home/usr/file1 中的 file1 包含以下數據:

83.149.9.216 - - [17/May/2015:10:05:07 +0000] "GET /presentations/logstash-monitorama-2013/plugin/notes/notes.js HTTP/1.1" 501 2892 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
83.149.9.216 - - [17/May/2015:10:05:34 +0000] "GET /presentations/logstash-monitorama-2013/images/sad-medic.png HTTP/1.1" 502 430406 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
83.149.9.216 - - [17/May/2015:10:05:57 +0000] "GET /presentations/logstash-monitorama-2013/css/fonts/Roboto-Bold.ttf HTTP/1.1" 500 38720 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"

同樣,目錄 /home/usr/usr2/file2 中的 file2 包含以下數據:

46.105.14.53 - - [17/May/2015:11:05:33 +0000] "GET /blog/tags/puppet?flav=rss20 HTTP/1.1" 500 14872 "-" "UniversalFeedParser/4.2-pre-314-svn +http://feedparser.org/"
5.102.173.71 - - [17/May/2015:11:05:13 +0000] "GET /robots.txt HTTP/1.1" 200 - "-" "Mozilla/5.0 (compatible; MojeekBot/0.6; http://www.mojeek.com/bot.html)"
5.102.173.71 - - [17/May/2015:11:05:06 +0000] "GET /projects/xdotool/ HTTP/1.1" 200 12292 "-" "Mozilla/5.0 (compatible; MojeekBot/0.6; http://www.mojeek.com/bot.html)"
208.91.156.11 - - [17/May/2015:11:05:05 +0000] "GET /files/logstash/logstash-1.3.2-monolithic.jar HTTP/1.1" 404 324 "-" "Chef Client/10.18.2 (ruby-1.9.3-p327; ohai-6.16.0; x86_64-linux; +http://opscode.com)"

那么,如何使用 bash 腳本組合/讀取不同目錄中的所有數據。 我希望 output 像這樣從該文件中獲取響應 5xx:

83.149.9.216 [17/May/2015:10:05:07 +0000 HTTP/1.1" 501
83.149.9.216 [17/May/2015:10:05:34 +0000] HTTP/1.1" 502
46.105.14.53 [17/May/2015:11:05:33 +0000] HTTP/1.1" 500
5.102.173.71 [17/May/2015:11:05:13 +0000] HTTP/1.1" 500
etc...

怎么樣

sort /home/usr/file1  /home/usr/usr2/file2

?

我不確定您的問題是什么,但以防萬一,您不知道如何編寫正則表達式來解析您的 web 服務器日志:

#! /bin/bash

exec <<EOF
83.149.9.216 - - [17/May/2015:10:05:07 +0000] "GET /presentations/logstash-monitorama-2013/plugin/notes/notes.js HTTP/1.1" 501 2892 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
83.149.9.216 - - [17/May/2015:10:05:34 +0000] "GET /presentations/logstash-monitorama-2013/images/sad-medic.png HTTP/1.1" 502 430406 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
83.149.9.216 - - [17/May/2015:10:05:57 +0000] "GET /presentations/logstash-monitorama-2013/css/fonts/Roboto-Bold.ttf HTTP/1.1" 500 38720 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
46.105.14.53 - - [17/May/2015:11:05:33 +0000] "GET /blog/tags/puppet?flav=rss20 HTTP/1.1" 500 14872 "-" "UniversalFeedParser/4.2-pre-314-svn +http://feedparser.org/"
5.102.173.71 - - [17/May/2015:11:05:13 +0000] "GET /robots.txt HTTP/1.1" 200 - "-" "Mozilla/5.0 (compatible; MojeekBot/0.6; http://www.mojeek.com/bot.html)"
5.102.173.71 - - [17/May/2015:11:05:06 +0000] "GET /projects/xdotool/ HTTP/1.1" 200 12292 "-" "Mozilla/5.0 (compatible; MojeekBot/0.6; http://www.mojeek.com/bot.html)"
208.91.156.11 - - [17/May/2015:11:05:05 +0000] "GET /files/logstash/logstash-1.3.2-monolithic.jar HTTP/1.1" 404 324 "-" "Chef Client/10.18.2 (ruby-1.9.3-p327; ohai-6.16.0; x86_64-linux; +http://opscode.com)"
EOF

while read -r line; do
  if [[ $line =~ ^(((^|\.)[0-9]{1,3}){4})\ -\ -(\ \[[^\]]+\])\ \"GET\ [^\"]*\"(\ [0-9]{3}).*$ ]]; then
    for i in 1 4 5; do
      printf %s "${BASH_REMATCH[$i]}"
    done
    printf '\n'
  fi
done

謝謝大家,研究后更多。 我有 output 的結果:

while [ $# -gt 0 ] 
do 
    result=`cat "$arg1" "$arg2" | awk '{print $ouput1 " " $ouput2 " "}' |  grep -E "50[0-9]|520"`
    echo "$result"
    exit 1
done

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM