如何使用grep查找管道|传来的字符串

起因

今天遇到一个问题需要查看业务日志,场景大概是这样的,每个次请求都会产生多行业务日志,第一行日志记录了请求参数uid,每行业务日志都会有一个traceid。我们先需要根据某个人的uid去查找他的所有请求的业务日志。

例如:
2020/05/26 23:26:40.041 [I] [xxx.go:34]  br6jac5jeehi2459hk0g RequestParam: {"uid":213123123} 
2020/05/26 23:26:40.126 [I] [bbb.go:53]  asdasdasdasdasdasdas Response CostTime: 84.806814ms 
2020/05/26 23:26:40.041 [I] [ccc.go:34]  sdfasdfasdfasfasdfas RequestParam: {"uid":123123}
2020/05/26 23:26:40.041 [I] [sss.go:61]  br6jac5jeehi2459hk00 Abtest Api:
2020/05/26 23:26:40.043 [I] [fff.go:84]  br6jac5jeehi2459hk00 Abtest Resp: {}

第5列是traceid
逻辑顺序就是grep取出这个人的uid的所有traceid,在把所有的有相关traceid的行都取出

开始操作:
方法1:

作为一个awk小能手,没有啥是awk不能搞定的

grep '213123123' /info.log |awk '{b=system("grep --color "$5" /info.log");print b}'

结果可行,唯一的遗憾是system函数会把执行命令的结果也返回,于是多了一串串奇怪的0,1,0,1,强迫症受不了。

方法2

管道配合xargs加-i参数,意思为将前一个管道输出的每一行做为参数替换到{}所在的位置,问题完美解决。

grep '213123123' /info.log |awk '{print $5}'|xargs -i grep {} test.txt

如果你不想用{}作为替换占位符,-I可以指定占位符,所以以上也可以这样写

//指定!作为占位符
grep '213123123' /info.log |awk '{print $5}'|xargs -I ! grep ! test.txt

但是在mac中不支持-i,只支持-I

热爱coding

134 声望
2 粉丝
0 条评论
推荐阅读
go httpclient请求流程分析
httpclient 默认启用keepalive,使用链接池复用tcp链接,设置client.Transpost.DisableKeepAlives =false 禁用长链接。

viggo阅读 927

麒麟操作系统 (kylinos) 从入门到精通 - 综合篇
类别:笔记本型号:中国长城 UF712硬件平台:飞腾处理器(ArmV8 指令集)系统:银河麒麟操作系统 V10 SP1(2203) 关键词:信创,麒麟系统,linux,PKS,银河麒麟,飞腾,arm64,arm,FAQ,资料汇总特别说明:本文为综合信息...

码上世界1阅读 2.6k评论 10

封面图
windows 批处理bat,设置定时关机
文章来源:[链接] {代码...}

jigsaw2阅读 3.2k

如何批量 git pull 某个文件夹中的 git 仓库?
上代码用 shell 脚本可以比较方便实现:首先新建脚本:pull-all.sh {代码...} 填入如下内容: {代码...} 然后改一下权限: {代码...} 接下来就可以直接运行了: {代码...} 也可以不跟参数,会提示你输入目录~注意...

savokiss阅读 1.4k

封面图
Linux - Shell
一般使用#!/bin/bash来解析shell语法,当然还有zsh, ksh等,但一般用的最多的就是bash一、变量-e参数:解析echo中的特殊字符,如换行:echo -e "Hello \nWorld"1.1、 单引号 '如果变量被包含在单引号里...

阿南阅读 880

Linux输出转换命令 xargs
一、基本用法xargs命令的作用,是将标准输入转为命令行参数。原因:大多数命令都不接受标准输入作为参数,只能直接在命令行输入参数,这导致无法用管道命令传递参数如下面 echo 不接受标准输出做参数,可用 xargs...

大数据王小皮阅读 877评论 1

shell 备忘
1:常用快捷键/命令Ctrl + a :移到命令行首Ctrl + e :移到命令行尾Ctrl + u :从光标处删除至命令行首 {代码...} 2: 特殊变量$? -> 上一个命令的退出状态或函数返回值 {代码...} 退出状态码(exit status)是...

tim_xiao阅读 687

热爱coding

134 声望
2 粉丝
宣传栏