AWK / SED / grep的提取物具有特定图案线的一部分 [英] awk/sed/grep extract part of lines with specific pattern
问题描述
我试图提取文件,如下面的部分明确:
与MongoDB的创建 1443113312蒙戈客户端连接://172.28.128.5:27017
1443113312 [全体],运行时间(毫秒),4864.0
1443113313 [读取],返回= 0,485
1443113313 [清理],99thPercentileLatency(美国),4487.0
1443113314 [更新],99thPercentileLatency(美国),27743.0
这是我期待的输出:
的MongoDB://172.28.128.5操作=总1443113312
MongoDB的://172.28.128.5操作=读1443113313
MongoDB的://172.28.128.5操作= CLEANUP 1443113313
MongoDB的://172.28.128.5操作=更新1443113314
我真的AP preciate任何建议。谢谢你。
$ awk的-F'[] [\\ t:] +''/ MongoDB的/ {a = $(NF -2):$(NF-1);其次} A {printf的%s的操作=% - 7S%S \\ n,一,$ 2,$ 1}'文件
MongoDB的://172.28.128.5操作=总1443113312
MongoDB的://172.28.128.5操作=读1443113313
MongoDB的://172.28.128.5操作= CLEANUP 1443113313
MongoDB的://172.28.128.5操作=更新1443113314
工作原理
-
-F'[] [\\ t:] +
本设置字段分隔符的空格,制表符,冒号或方括号(
[]
)。 任意组合 -
/ MongoDB的/ {a = $(NF-2):$(NF-1);接下来}
如果该行包含
的MongoDB
,那么我们节省第三和倒数第二字段变量A
。 -
A {printf的%s的操作=% - 7S%S \\ n,一,$ 2,$ 1}
如果变量
A
已分配的值,然后打印出格式化按问题的电流。
变化
这产生蒙戈字符串,但没有IP和放入括号操作:
$ awk的-F'[] [\\ t:] +''/ MongoDB的/ {a = $(NF-2);}旁边一个{printf的%S \\ tOperations = \\%s \\的\\ t%S \\ n,一,$ 2,$ 1}'文件
MongoDB的操作=综合1443113312
MongoDB的操作=READ1443113313
MongoDB的操作=清理1443113313
MongoDB的操作=UPDATE1443113314
I'm trying to extract definite part of a file such as below:
1443113312 mongo client connection created with mongodb://172.28.128.5:27017
1443113312 [OVERALL], RunTime(ms), 4864.0
1443113313 [READ], Return=0, 485
1443113313 [CLEANUP], 99thPercentileLatency(us), 4487.0
1443113314 [UPDATE], 99thPercentileLatency(us), 27743.0
This is the output I'm expecting:
mongodb://172.28.128.5 Operations=OVERALL 1443113312
mongodb://172.28.128.5 Operations=READ 1443113313
mongodb://172.28.128.5 Operations=CLEANUP 1443113313
mongodb://172.28.128.5 Operations=UPDATE 1443113314
I really appreciate any suggestion. Thanks.
$ awk -F'[][ \t:]+' '/mongodb/{a=$(NF-2)":"$(NF-1);next} a{printf "%s Operations=%-7s %s\n",a,$2,$1}' file
mongodb://172.28.128.5 Operations=OVERALL 1443113312
mongodb://172.28.128.5 Operations=READ 1443113313
mongodb://172.28.128.5 Operations=CLEANUP 1443113313
mongodb://172.28.128.5 Operations=UPDATE 1443113314
How it works
-F'[][ \t:]+'
This sets the field separator to any combination of spaces, tabs, colons, or square brackets (
[]
)./mongodb/{a=$(NF-2)":"$(NF-1);next}
If the line contains
mongodb
, then we save the third and second to last fields in the variablea
.a{printf "%s Operations=%-7s %s\n",a,$2,$1}
If the variable
a
has been assigned a value, then print out the current reformatted as per the question.
Variation
This produces the mongo string but not IP and puts the operation in parens:
$ awk -F'[][ \t:]+' '/mongodb/{a=$(NF-2);next} a{printf "%s\tOperations=\"%s\"\t%s\n",a,$2,$1}' file
mongodb Operations="OVERALL" 1443113312
mongodb Operations="READ" 1443113313
mongodb Operations="CLEANUP" 1443113313
mongodb Operations="UPDATE" 1443113314
这篇关于AWK / SED / grep的提取物具有特定图案线的一部分的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!