2

ログファイルはさまざまなログファイルに分散しています(基本的に、ログをローテーションするように設定されています)。日付と時間に基づいてログを抽出する必要があります。サンプル ログ ファイルには以下のものがあります。

2012.12.06 01:56:01 AUTH_SERVER.VMP_SYS [main - ] <INFO   > Loaded properties
2012.12.06 01:56:01 AUTH_SERVER.VMP_SYS [main - ] <INFO   > Initialized logging
2012.12.06 01:56:01 AUTH_SERVER.VMP_SYS [main - ] <CONFIG > Log levels = 

以下の awk ワンライナーで試してみました...

awk -F - '"2012.12.06 01:56:01" < $1 && $1 <= "2012.12.08 04:30:00"' server.log   server.log.1

これは必要なものを出力します...

しかし、for ループを使用して、これを使用して txt ファイルに抽出されたログ ファイル名のリストを実行したいと考えています。

find server.log* -exec ls -lth {} \; | awk '{print $9}' > logfilenames.txt

開始日時から終了日時まで正しいログ ファイル名を検索し、別のファイルに出力するために、for ループの入力として logfilenames コンテンツ (これには、そのディレクトリ内のログ ファイルのフル パスがあります) を使用する必要があります。

このスクリプトを完了するには、for ループのヘルプが必要です。

4

1 に答える 1

1

なぜただしないのですか

awk -F - '"2012.12.06 01:56:01" < $1 && $1 <= "2012.12.08 04:30:00"' server.log*

また、

cat `cat logfilenames.txt` 

logfilenames.txt に含まれるすべてのファイルを cat します。出力に対して awk を実行できます。

xargs を使用して、grep の出力を awk にリダイレクトすることもできます。したがって、指定した 2 つのコマンドを使用するには、次のようにします。

find server.log* -exec ls -lth {} \; | awk '{print $9}' | xargs awk -F - '"2012.12.06 01:56:01" < $1 && $1 <= "2012.12.08 04:30:00"'
于 2012-12-20T15:43:44.863 に答える