1

解析したいログファイルがあります

最初の 2 つのフィールドのみが必要です (スペースで区切られています)

ログ ファイルのサンプル行:

1362960460.697 19 27.197.12.76 TCP_MISS/404 339 GET http://what-ever-server.com/what-ever-file - DIRECT/22.22.22.22 text/html

最初のフィールドは、"." の後に数字を入れないでください。

Cでできると思ったのですが、すべての文字をトレースしてスペースか「。ここのいくつかの投稿で、grepは仕事をすることができますが、ファイルのフィールドは固定長ではありません

Cでやるべきですか?または、grepに解析できるオプションがありますか

前もって感謝します

4

4 に答える 4

4
$ cat file
1362960460.697 19 27.197.12.76 TCP_MISS/404 339 GET http://what-ever-server.com/what-ever-file - DIR
ECT/22.22.22.22 text/html

$ awk -F'[ .]' '{print $1,$3}' file
1362960460 19

$ sed 's/\([^.]\)\.[^ ]* \([^ ]*\).*/\1 \2/' file
1362960460 19
于 2013-03-23T13:20:33.937 に答える
4

これが awk の目的です。

cat logfile | awk '{print $1 " " $2}' | sed 's_\.[0-9]*__g'

を使用して、各行の最初と 2 番目のフィールドを印刷しawkます。次に、小数点以下の桁数を一致させ、 を使用して削除しますsed

于 2013-03-23T10:55:15.093 に答える
4

ファイルの最初の 2 つのフィールドを取得するにはawk(すべての UNIX または Linux ディストリビューションに含まれています)

awk '{split($1,a,"."); print a[1], $2}' logfile

説明:

  • split関数は、セパレーターに基づいて最初のトークン ( $1) を配列に分割しますa.
  • print a[1], $2デフォルトではスペースである出力フィールドセパレータに基づいて2つの値を出力します

より簡単な方法 (最初のフィールドが数値であると仮定) は、次のint関数を使用することです。

 awk '{print int($1), $2}' logfile
于 2013-03-23T10:58:16.217 に答える
0

BSD バージョン (すなわち OSX)

cat logfile | awk '{print $1, $2}' | sed -e 's;\.*;;g'
于 2013-03-23T11:01:41.120 に答える