AWK / SED / grep的提取物具有特定图案线的一部分 [英] awk/sed/grep extract part of lines with specific pattern

查看:86
本文介绍了AWK / SED / grep的提取物具有特定图案线的一部分的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图提取文件,如下面的部分明确:

与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 variable a.

  • 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆