4

次のようなテキストを含むログ ファイルがあります。

66.249.74.18 - - [21/Apr/2013:05:55:33 +0000] 200 "GET /1.jpg HTTP/1.1" 7691 "-" "Googlebot-Image/1.0" "-"
220.181.108.96 - - [21/Apr/2013:05:55:33 +0000] 200 "GET /1.html HTTP/1.1" 17722 "-" "Mozilla/5.0 (互換性あり; Baiduspider/2.0; +http:/ /www.baidu.com/search/spider.html)" "-"

すべての IP およびユーザー エージェント情報をファイルに収集したい:

66.249.74.18 "Googlebot-Image/1.0"
220.181.108.96 "Mozilla/5.0 (互換; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)"

awkでどうすればできますか?

awk '{print $1}'すべての IP とawk -F\" '{print $6}'すべてのユーザー エージェントを一覧表示できることはわかっていますが、それらを組み合わせて出力する方法がわかりません。

4

4 に答える 4

3
awk -F' - |\\"' '{print $1, $7}' temp1

出力:

66.249.74.18 Googlebot-Image/1.0
220.181.108.96 Mozilla/5.0 (compatible;Baiduspider/2.0;+http://www.baidu.com/search/spider.html)

temp1 ファイル:

66.249.74.18 - - [21/Apr/2013:05:55:33 +0000] 200 "GET /1.jpg HTTP/1.1" 7691 "-" "Googlebot-Image/1.0" "-"
220.181.108.96 - - [21/Apr/2013:05:55:33 +0000] 200 "GET /1.html HTTP/1.1" 17722 "-" "Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)"     "-"
于 2013-04-22T09:43:29.550 に答える
2
awk '{print $1,$6}' FPAT='(^| )[0-9.]+|"[^"]*"'
  • フィールドを次のように定義します
    • 行頭またはスペースで開始
    • [0-9.]+または_"[^"]*"
  • 次に、フィールド 1 と 6 を出力します。
于 2013-04-21T07:00:50.020 に答える
1

GNU拡張機能を使用しない移植可能なアプローチ:

awk '{printf "%s ",$1;for(i=12;i<NF;i++)printf "%s ",$i;printf "\n"}' file
于 2013-04-21T10:16:51.943 に答える
1

使用perl:

perl -nle '/^((?:\d+\.?){4})(?:.+?"){4}\s+(".*?")/ && print "$1 $2"' access_log

トリックは、二重引用符 + 二重引用符:ではない文字を数えることにあります(?:.+?"){4}。正規表現の視覚的な説明は次のとおりです: https://regex101.com/r/xP0kF4/4

正規表現は以前の回答よりも複雑ですが、他のプロパティを簡単に解析できます。

于 2016-02-19T04:35:19.997 に答える