जबकि उपर्युक्त उपकरण सभी शांत हैं मुझे लगता है कि मुझे पता है कि प्रश्नकर्ता क्या पूछ रहा था। यह अक्सर मुझे पीड़ा देता है कि मैं जिस तरह से अन्य फ़ाइलों के साथ कर सकता हूं, मैं एक एक्सेस-लॉग से जानकारी नहीं खींच सकता।
यह डंब एक्सेस लॉग फॉर्मेट के कारण है:
127.0.0.1 - - [16/Aug/2014:20:47:29 +0100] "GET /manual/elisp/index.html HTTP/1.1" 200 37230 "http://testlocalhost/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:31.0) Gecko/20100101 Firefox/31.0"
उन्होंने तारीख के लिए [] और अन्य चीजों के लिए "" का उपयोग क्यों किया? क्या उन्हें लगता है कि हमें नहीं पता था कि एक तारीख 4 क्षेत्र में थी? यह अविश्वसनीय रूप से निराशाजनक है।
इसके लिए अभी सबसे अच्छा उपकरण है gawk:
gawk 'BEGIN { FPAT="([^ ]+)|(\"[^\"]+\")|(\\[[^\\]]+\\])" } { print $5 }'
इससे ऊपर के डेटा पर आपको मिलेगा:
"GET /manual/elisp/index.html HTTP/1.1"
दूसरे शब्दों में, एफपीएटी आपको अपाचे-लॉग के क्षेत्रों को बाहर निकालने की क्षमता देता है जैसे कि वे सिर्फ अंतरिक्ष से अलग संस्थाओं के बजाय वास्तविक क्षेत्र थे। मैं हमेशा यही चाहता हूं। मैं तो उस पाइप लाइन के साथ थोड़ा और पार्स कर सकता हूं।
FSPAT बनाने को यहाँ परिभाषित किया गया है: http://www.gnu.org/software/gawk/manual/html_node/Splitting-By-Content.html
इसलिए आप एक gawk बनाने के लिए एक उपनाम सेट कर सकते हैं जो अपाचे लॉग को पार्स कर सकता है:
alias apacheawk="gawk -vFPAT='([^ ]+)|(\"[^\"]+\")|(\\\\[[^\\\\]]+\\\\])' "
apacheawk '$6 ~ /200/ { print $5 } | sort | uniq
मेरे लिए यह बनाया:
"GET / HTTP/1.1"
"GET /manual/elisp/index.html HTTP/1.1"
"GET /manual/elisp/Index.html HTTP/1.1"
"GET /scripts/app.js HTTP/1.1"
"GET /style.css HTTP/1.1"
और निश्चित रूप से लगभग कुछ भी अब संभव है।
का आनंद लें!