巨大なログファイル(> 14 GB)のGrepは最後のx GBのみですか?


34

巨大なログファイル(14 GB以上)で何かを検索する必要があります。私はそれが最後の4 GBかそこらにあると確信しています。

最初のX GBをスキップして速度を上げる方法はありますか?


7
LC_ALL=C grepスピードアップするかもしれません。
jfs

1
賢明なgrep表現を選択することで、多くの速度を得ることができます...未知の長さのワイルドカード(などa.*thing)は、評価に非常に長い時間がかかる場合があります。間違ったものを最適化しようとしている可能性があります(ファイルの一部のみを検索することは決して痛いことはありませんが、明らかに、それが最大の高速化の源ではないかもしれません)。
フローリス

回答:


75

スイッチを使用して、最後の4GB程度を出力するためにtailを使用できると思います-c

-c、--bytes = [+] NUM
は最後のNUMバイトを出力します。または、-c + NUMを使用して、各ファイルのバイトNUMから出力します

おそらく、開始したいオフセットに設定してingすることで、ddで何かをすることができます。bs=1skip

dd if=file bs=1024k skip=12g | grep something

83
その後、logrotateを構成する必要があります。
ジェラルドシュナイダー

3
@Rogier質問に答えを追加するのではなく、ソリューションに答えを追加してください。これはself-answer:serverfault.com/help/self-answerに
-AL

5
@istheEnglishway:ええ、いや、彼らは別のコマンドを投稿しました。
モニカとの軽さのレース

11
しかし、あなたの答えは、そのソリューションを実装する実際のコマンド、つまり付加価値を提供するものではありません。それをあなたの答えに編集するか、OPが新しい答えとして投稿することができます。彼らは間違いなくそれを質問に追加すべきではありません。そして、あなたは間違いなく「鼻を突っ込む」などの言い回しを投げるべきではありません。
モニカとの軽さのレース

7
@istheEnglishway、(参照:StackOverflowのマニュアルを参照して)のmanページを読んでするよりも簡単に例のメーク物事を持つそれを信じるかどうか
Pierre.Sassoulas

32

コメントのいくつかがそれを求めたので、私はちょうどこれを投稿しています。

最終的に使用したのは(15 GBファイル)です。非常に高速に動作し、時間を大幅に節約できました。

tail -f -c 14G file | grep something

同じファイルで非常に初歩的なベンチマークも行いました。私はテストしました:

grep xxxファイル
//永遠にかかりました(> 5分)

dd if = file bs = 1 skip = 14G | grep xxx
//非常に高速<1秒

テール-c 14g | grep xxx
//かなり高速<2秒

これtailは少し短いです。

注意:使用されるサフィックスgGコマンドごとに異なります(Ubuntu 15.10)


ベンチマーク間のディスクキャッシュをクリアしましたか?私は最初のもののほとんどの時間はI / Oだったと思う。高速化は、300倍ではなく、15倍のオーダーにする必要があります。
リード

2
@Reid私はしませんでした。しかし、私はコマンドを複数回実行しました。ddまたはtailgrepだけ(キャッシュかどうか)に比べて速度を大幅に向上させると確信しています。
ロジャー

19

これはタイトルの質問には答えませんが、あなたがやりたいことをします。tacを使用してファイルを反転し、grepを使用して文字列を見つけます。ファイル内で文字列が1回だけ、または既知の回数だけ出現する場合は、既知の出現回数が見つかるまで実行します。そうすれば、ファイルのどこにあるかについての仮定が正しくない場合でも、それが見つかります。制限したい場合は、headを使用してそれを行うことができます。headコマンドは、tacとgrepの間を行き来します。

したがって、コマンドは次のようになります。

tac < logfile | grep myString

1
まったく同じ答えを書くためにここに来ました。誰もあなたを支持していないことに驚いています。
ドミトリーグリゴリエフ

2
少し時間を取ったが、その後、私はしゃがんでうめきました... tacはcatの反対です。
サミ

1
application / debug logを掘り下げる必要がありました。行を逆にするため、読みやすくなりません;-)ただし、非常に高速です。見たことtacがないので、ありがとう!
ロジャー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.