近日面试某厂,因为一句精通linux命令,可谓是给我上了一课。
上来就是一道场景题:说,一个日志文件系统,怎么排查出一条日志的上下文呢?
我一听这还不简单直接写:grep 'xxx' app.log
So easy~
奈何我太年轻了,他说上下文。
我一想这面试官有点东西啊。
答案: grep -C 'xxx' app.log
简单介绍下grep
- -A: 除了显示符合范本样式的那一列之外,并显示该行之后的内容。[这不就是after的简称吗? 所以写
-after
不过分吧,其实另一种写法是--after-context
] - -B: 除了显示符合样式的那一行之外,并显示该行之前的内容。[或 --before-context]
- -C:除了显示符合样式的那一行之外,并显示该行之前后的内容。[说白了就是(A+B).equals(C)]
结果面试官有来了,假如日志内容为:INFO ||a=123||_msg=error||method=GET||args=0001|| traceId=0a5ad26162cce6
请使用命令提取出traceId,即提取出0a5ad26162cce6
我一看这简单啊,我会
grep traceId a.log | awk -F '|' '{print $11}'
结果是:
这下尴尬了,不行我字符串切割吧
grep traceId a.log | awk -F '|' '{print substr($11, 10)}'
齐活!
结果来了一句,那你统计下数量吧。
我一听这不是我刚刚总结完的吗?
上链接:https://www.jianshu.com/p/7c8d07a2435d
其实上述的答案还是有一定问题的,一般这种问题有2个方面考察,第一命令,第二个是文件怎么打开,假如一个几十G的文件这么操作是存在风险的,所以假如遇到这类问题,先和面试官打好招呼,在文件不是很大的前提下命令是这样的。
文件很大就分而治之呗。
网友评论