如何在greping之后从文件中提取一些东西?

时间:2015-09-21 21:39:19

标签: linux bash shell ubuntu

如何在执行group-3-vm1之后提取grep

$ cat output/tpcds_query_1a_71_mr.out | grep "Tracking URL" | tail -1

结果如下:

Starting Job = job_1442587212068_0126, Tracking URL = http://group-3-vm1:8088/proxy/application_1442587212068_0126/

2 个答案:

答案 0 :(得分:3)

这个awk命令替换了grep和tail命令,同时还提取了感兴趣的文本:

$ awk -F'[:/]' '/Tracking URL/{n=$4;} END{print n;}' output/tpcds_query_1a_71_mr.out 
group-3-vm1

如何运作

  • -F'[:/]'

    这会将字段分隔符设置为冒号或斜杠。

  • /Tracking URL/{n=$4;}

    这会查找包含Tracking URL的行,并将第四个字段保存在变量n中。

  • END{print n;}

    我们到达文件末尾后,会打印出我们找到的最后一个n

实施例

这是一个示例测试文件和输出:

$ cat output/tpcds_query_1a_71_mr.out 
Starting Job = job_1442587212068_0126, Tracking URL = http://group-1-vm1:8088/proxy/application_1442587212068_0126/
Starting Job = job_1442587212068_0126, Tracking URL = http://group-2-vm1:8088/proxy/application_1442587212068_0126/
Starting Job = job_1442587212068_0126, Tracking URL = http://group-3-vm1:8088/proxy/application_1442587212068_0126/
Starting Job = job_1442587212068_0126, No Track URL = http://group-4-vm1:8088/proxy/application_1442587212068_0126/
$ awk -F'[:/]' '/Tracking URL/{n=$4;} END{print n;}' output/tpcds_query_1a_71_mr.out 
group-3-vm1

答案 1 :(得分:1)

试试这个:

cat output/tpcds_query_1a_71_mr.out | grep "Tracking URL" | tail -1 | sed 's/.\+Tracking URL = http:\/\/\([a-zA-Z0-9\-]\+\).*/\1/g'

一些解释。这使用了你的解决方案,但通过sed将结果通过管道覆盖到最后并包含http://并使用组捕获((...))来捕获a-Z0-9和 - 的所有内容。注意 - 如果某些主机具有下划线,则需要将_添加到捕获字符。