У меня есть достаточно большой файл .dat, и я хочу использовать awk-скрипт для печати второго вхождения строки. .dat файл:awk для печати n-й экземпляр строки
YCSB Client 0.1
Command line: -db com.yahoo.ycsb.db.MongoDbClient -s -P /home/james/YCSB/workloads/workloada -p mongodb.url=mongodb://192.168.0.8:27017 -p mongodb.database=ycsb -p recordcount=105 -t
new database url = 192.168.0.8:27017/ycsb
mongo connection created with 192.168.0.8:27017/ycsb
[OVERALL], RunTime(ms), 1086.0
[OVERALL], Throughput(ops/sec), 920.8103130755064
[UPDATE], Operations, 506
[UPDATE], AverageLatency(us), 988.4288537549407
[UPDATE], MinLatency(us), 410
[UPDATE], MaxLatency(us), 43786
[UPDATE], 95thPercentileLatency(ms), 2
[UPDATE], 99thPercentileLatency(ms), 6
[UPDATE], Return=1, 506
[UPDATE], 0, 432
[UPDATE], 1, 40
[UPDATE], 2, 9
[UPDATE], 3, 9
[UPDATE], 4, 4
[UPDATE], 5, 6
...
[UPDATE], 997, 0
[UPDATE], 998, 0
[UPDATE], 999, 0
[UPDATE], >1000, 0
[READ], Operations, 494
[READ], AverageLatency(us), 429.2004048582996
[READ], MinLatency(us), 177
[READ], MaxLatency(us), 9428
[READ], 95thPercentileLatency(ms), 1
[READ], 99thPercentileLatency(ms), 5
[READ], Return=1, 494
[READ], 0, 460
[READ], 1, 16
[READ], 2, 6
[READ], 3, 3
[READ], 4, 4
...
[READ], 995, 0
[READ], 996, 0
[READ], 997, 0
[READ], 998, 0
[READ], 999, 0
[READ], >1000, 0
[CLEANUP], Operations, 1
[CLEANUP], AverageLatency(us), 1397.0
[CLEANUP], MinLatency(us), 1397
[CLEANUP], MaxLatency(us), 1397
[CLEANUP], 95thPercentileLatency(ms), 1
[CLEANUP], 99thPercentileLatency(ms), 1
Я использую эту команду, чтобы попытаться напечатать второе вхождение AverageLatency
и Operations
:
awk -F'[,=]|://' '/^Command/{db=$2}/AverageLatency/{i=$3}/Operations/{t=$3}END{print t i,db}'
Однако это, кажется, возвращаются значения из нижней части файла или 3-го появления:
1 1397.0 mongodb
Я относительно новым для использования AWK, но кажется, что он работает в нижней части файла вверх?
Я попытался использовать awk /AverageLatency/{i++}i==2
в моей команде, поскольку он работает сам по себе и возвращает правильные значения.
Просто для ясности желаемого результата здесь будет 494 429.2004048582996 mongodb
он продолжает читать через файл до тех пор, пока он не дойдет до конца, сопоставляя каждый раз, когда он находит «AverageLatency», поэтому он печатает значения из последнего раза. Чтобы узнать, что я имею в виду, do '/ AverageLatency/{i = $ 3; exit} END {...' Удачи – shellter
Да! awk -F '[, =] |: //' '/^Command/{db = $ 2}/AverageLatency/{i ++} i == 2 {i = $ 3; exit}/Operations/{t = $ 3} END { print ti, db} ' Работает отлично. – johnnydrama
не стесняйтесь оставлять свой собственный ответ и принимать через 48 часов за 15 очков репутации. Добро пожаловать в S.O. Удачи. – shellter