Logdatei:

Logdatei:

1) Ich habe eine Protokolldatei mit dem Namen version.txt und muss alle Wörter mit dem Schlüsselwort „took ? ms“ herausfiltern. Die Zahl vor ms („took ?? ms“) ist bei jedem Protokolleintrag unterschiedlich.

Die Ausgabe sollte wie folgt aussehen:

took 4 ms
took 3 ms
took 4 ms
took 5 ms

2) Es ist auch möglich, Werte > 100 in einer Liste aufzulisten, d. h. es sollten Werte über 100 aufgelistet werden. Die Ausgabe sollte etwa so aussehen:

took 100 ms
took 110 ms
took 450 ms

Logdatei:

2020-03-11 06:19:29.857  INFO 29371 --- [  async-task-32] c.l.s.mapstore.InventoryPictureMapStore  : InventoryPictureMapStore.store() called **took 4 ms** key: I,748518,00000,00000,595 Value: InventoryPicture [, sourcingEnabled=false, itemType=1, onHand_1=100, buffer_22=-1] writeToCassandra: true

2020-03-11 06:19:29.857  INFO 29371 --- [  async-task-10] c.l.s.mapstore.InventoryPictureMapStore  : InventoryPictureMapStore.store() called **took 3 ms** key: I,26221,00000,00000,595 Value: InventoryPicture [, sourcingEnabled=false, itemType=1, onHand_1=-29, damaged_3=-1] writeToCassandra: true

2020-03-11 06:19:29.857  INFO 29371 --- [  async-task-13] c.l.s.mapstore.InventoryPictureMapStore  : InventoryPictureMapStore.store() called **took 4 ms** key: I,960808,00000,00000,595 Value: InventoryPicture [, sourcingEnabled=false, itemType=1, onHand_1=14] writeToCassandra: true

2020-03-11 06:19:29.857  INFO 29371 --- [  async-task-30] c.l.s.mapstore.InventoryPictureMapStore  : InventoryPictureMapStore.store() called **took 5 ms** key: I,771963,00000,00000,595 Value: InventoryPicture [, sourcingEnabled=false, itemType=1, onHand_1=64, buffer_22=-1] writeToCassandra: true


2020-03-11 06:19:29.857  INFO 29371 --- [  async-task-30] c.l.s.mapstore.InventoryPictureMapStore  : InventoryPictureMapStore.store() called **took 100 ms** key: I,771963,00000,00000,595 Value: InventoryPicture [, sourcingEnabled=false, itemType=1, onHand_1=64, buffer_22=-1] writeToCassandra: true

2020-03-11 06:19:29.857  INFO 29371 --- [  async-task-30] c.l.s.mapstore.InventoryPictureMapStore  : InventoryPictureMapStore.store() called **took 110 ms** key: I,771963,00000,00000,595 Value: InventoryPicture [, sourcingEnabled=false, itemType=1, onHand_1=64, buffer_22=-1] writeToCassandra: true

2020-03-11 06:19:29.857  INFO 29371 --- [  async-task-30] c.l.s.mapstore.InventoryPictureMapStore  : InventoryPictureMapStore.store() called **took 400 ms** key: I,771963,00000,00000,595 Value: InventoryPicture [, sourcingEnabled=false, itemType=1, onHand_1=64, buffer_22=-1] writeToCassandra: true

Antwort1

Das können Sie versuchen:

grep -oP "took [[:digit:]]{3,} ms" file

Ausgabe:

took 100 ms
took 110 ms
took 400 ms

Danke. Ist es möglich, auch Datum/Uhrzeit aufzulisten? So etwas wie das hier als Ausgabe:

2020-03-11 06:19:29.857 dauerte 100 ms

2020-03-11 06:19:29.857 dauerte 110 ms

Vorausgesetzt, alle Datensätze haben das gleiche Format, ist es mit cut, sedund einfacher grep:

cut -d' ' -f1,2,15-17 file | sed 's/*//g' | grep -P "took [[:digit:]]{3,} ms"

2020-03-11 06:19:29.857 took 100 ms
2020-03-11 06:19:29.857 took 110 ms
2020-03-11 06:19:29.857 took 400 ms

Antwort2

Sie können dies awkfolgendermaßen tun:

awk -F '**' '{print $2}' input_file

Um Uhrzeit und Datum hinzuzufügen, können Sie etwas wie Folgendes verwenden:

awk -F '**' '{split($1,a," ");print a[1]" " a[2]" " $2}' input_file

verwandte Informationen