精华内容
下载资源
问答
  • “ 最近开始用kpt记录自己的日常工作,本文将是该系列的第一篇,主要讲解linux下如何快速逻辑处理数据”Keep正在做日志筛选数据的事情,需要从服务日志中捞出含关键字的日志,并且该条日志中含响应时间数据,需捞出...

    最近开始用kpt记录自己的日常工作,本文将是该系列的第一篇,主要讲解linux下如何快速逻辑处理数据

    Keep

    正在做日志筛选数据的事情,需要从服务日志中捞出含关键字的日志,并且该条日志中含响应时间数据,需捞出其中大于500ms的数据

    Problem

    普通的grep只能捞出所有包含关键字的日志,没法做一些简单的逻辑判断,如果用编程语言来处理又会显得很笨重

    Try

    linux下有一个利器命令awk可以使用;

    对于test.log日志内容类似如下的:

    2019-05-03 20:00:00 requestId:a1 bb cc dd 4652019-05-03 20:00:01 requestId:aa bb cc kkk2019-05-03 20:00:01 requestId:a2 bb cc dd 5022019-05-03 20:00:01 requestId:a3 bb cc dd 600

    上述内容中数字表示响应时间,如果需要打印响应时间大于500的requestId的值,基于awk该怎么写:

    cat test.log |grep dd|awk '$7>500 {print $3}'

    接下来让我们带着疑问来学习入门下awk命令:

    awk 'BEGIN{ commands } pattern{ commands } END{ commands }'# 这是awk的标准格式,BEGIN和END是可选的# 1、通过关键字 BEGIN 执行 BEGIN 块的内容,即 BEGIN 后花括号 {} 的内容。# 2、完成 BEGIN 块的执行,开始执行body块。# 3、读入有  换行符分割的记录。# 4、将记录按指定的域分隔符划分域,填充域,$0 则表示所有域(即一行内容),$1 表示第一个域,$n 表示第 n 个域。# 5、依次执行各 BODY 块,pattern 部分匹配该行内容成功后,才会执行 awk-commands 的内容。# 6、循环读取并执行各行直到文件结束,完成body块执行。# 7、开始 END 块执行,END 块可以输出最终结果。
    b0bb2d1090b1bf94f1cf208f70d3e810.png

    重新来分析下上面写awk命令

    cat test.log |grep dd|awk '$7>500 {print $3}'# 先通过grep获取到所有包含dd的内容# 接下来使用awk命令,这里直接用body模块,处理每一行数据# awk默认的分割符刚好是空格,所以我们直接用$7可以直接拿到响应时间# 判断完后简单多了,我们直接$3拿到每一个requestId# 如果吹毛求疵下,只想拿到对应的requestId的值该怎么写?cat test.log |grep dd|awk '$7>500 {print $3}'|awk -F:'{print $2}'# 我们在上述命令基础上再加上管道符,并利用-F来指定新的分隔符:,刚好将requestId:a1这样的字符串切割成两个# 然后直接print $2即可

    一些awk的高级用法

    正则匹配:

    cat test.log |awk '/dd/ && $7>500 {print $3}'|awk -F: '{print $2}'# awk命令支持正则匹配,所以上述解决方案中,其实不需要grep命令,直接按照上述编写即可,&&表示并且

    if函数:

    cat test.log |awk '/dd/ {if($7>500)print $3}'|awk -F: '{print $2}'# awk自带if函数,上述解决方案我们还可以这样编写。将if函数放到body的{}中

    BEGIN的用法:

    f12565806cb06cc6a5f9fcfb1aeca45f.png

    END的用法

    cat test.log |awk 'BEGIN {print "im begin"} /dd/&&$7>500 {num=num+1;total=total+$7} END {print num;print total}'# awk支持自定义变量,上述命令是统计响应时间大于500的日志记录数,以及累计响应时长# 我们也可以先在BGGIN模块初始化自定义变量cat test.log |awk 'BEGIN {print "im begin";num=0;total=0} /dd/&&$7>500 {num=num+1;total=total+$7} END {print num;print total}'

    参考资料:

    https://www.runoob.com/linux/linux-comm-awk.html

    https://coolshell.cn/articles/9070.html

    展开全文
  • 这里还是稍微先一下auto这个关键字吧 auto:它很宽恒大量的,你就当它不存在吧。编译器在默认的缺省情况下,所有变量都是auto 的。一语代过。。。 register:这个关键字请求编译器尽可能的将变量存在CPU 内部...
    这里还是稍微先一下auto这个关键字吧
    
    auto:它很宽恒大量的,你就当它不存在吧。编译器在默认的缺省情况下,所有变量都是auto 的。一语代过。。。
    register:这个关键字请求编译器尽可能的将变量存在CPU 内部寄存器中而不是通过内存寻址访问以提高效率。注意是尽可能,不是绝对。你想想,一个CPU 的寄存器也就那么几个或几十个,你要是定义了很多很多register 变量,它累死也可能不能全部把这些变量放入寄存器吧,轮也可能轮不到你。
    皇帝身边的小太监----寄存器
    不知道什么是寄存器?那见过太监没有?没有?其实我也没有。没见过不要紧,见过就麻烦大了。^_^,大家都看过古装戏,那些皇帝们要阅读奏章的时候,大臣总是先将奏章交给皇帝旁边的小太监,小太监呢再交给皇帝同志处理。这个小太监只是个中转站,并无别的功能。
    那我们再联想到我们的CPU。CPU 不就是我们的皇帝同志么?大臣就相当于我们的内存,数据从他这拿出来。那小太监就是我们的寄存器了(这里先不考虑CPU 的高速缓存区)。数据从内存里拿出来先放到寄存器,然后CPU 再从寄存器里读取数据来处理,处理完后同样把数据通过寄存器存放到内存里,CPU 不直接和内存打交道。这里要说明的一点是:小太监是主动的从大臣手里接过奏章,然后主动的交给皇帝同志,但寄存器没这么自觉,它从不主动干什么事。一个皇帝可能有好些小太监,那么一个CPU 也可以有很多寄存器,不同型号的CPU 拥有寄存器的数量不一样。
    为什么要这么麻烦呢?速度!就是因为速度。寄存器其实就是一块一块小的存储空间,只不过其存取速度要比内存快得多。进水楼台先得月嘛,它离CPU 很近,CPU 一伸手就拿到数据了,比在那么大的一块内存里去寻找某个地址上的数据是不是快多了?那有人问既然它速度那么快,那我们的内存硬盘都改成寄存器得了呗。我要说的是:你真有钱!
    register修饰符暗示编译程序相应的变量将被频繁地使用,如果可能的话,应将其保存在CPU的寄存器中,以加快其存储速度。例如下面的内存块拷贝代码,还是看看实例比较实在:
    /* Procedure for the assignment of structures, */
    /* if the C compiler doesn't support this feature */
    #ifdef NOSTRUCTASSIGN
    memcpy (d, s, l)
    {
    register char *d;
    register char *s;
    register int i;
    while (i--)
    *d++ = *s++;
    }
    #endif
    但是使用register修饰符有几点限制
    (1)register变量必须是能被CPU所接受的类型。这通常意味着register变量必须是一个单个的值,并且长度应该小于或者等于整型的长度。不过,有些机器的寄存器也能存放浮点数。最好不要这样去用
    (2)因为register变量可能不存放在内存中,所以不能用“&”来获取register变量的地址。
    (3)只有局部自动变量和形式参数可以作为寄存器变量,其它(如全局变量)不行。在调用一个函数时占用一些寄存器以存放寄存器变量的值,函数调用结束后释放寄存器。此后,在调用另外一个函数时又可以利用这些寄存器来存放该函数的寄存器变量。所以说不要用register修饰全局变量等,因为他长时间的占用寄存器不允许再被使用了。
    (4)局部静态变量不能定义为寄存器变量。不能写成:register static int a, b, c,同样的道理,因为static变量函数结束不会被销毁,下面进入还会使用之前的数据,生命周期直到程序退出才结束,数据存放在静态区。
    (5)由于寄存器的数量有限(不同的cpu寄存器数目不一),不能定义任意多个寄存器变量,而且某些寄存器只能接受特定类型的数据(如指针和浮点数),因此真正起作用的register修饰符的数目和类型都依赖于运行程序的机器,而任何多余的register修饰符都将被编译程序所忽略。

    注意:
      早期的C编译程序不会把变量保存在寄存器中,除非你命令它这样做,这时register修饰符是C语言的一种很有价值的补充。然而,随着编译程序设计技术的进步,在决定哪些变量应该被存到寄存器中时,现在的C编译环境能比程序员做出更好的决定。实际上,许多编译程序都会忽略register修饰符,因为尽管它完全合法,但它仅仅是暗示而不是命令。
    知道这个关键字就可以了,也许你没有必要去用他。
    展开全文
  • keyword:是要查询的关键字关键字可以不用引号引起来 test.log:是文件名称,即要查询的文件 -C500:显示的行数,显示500行,可以没有 --color:颜色,给关键字颜色便于查找,默认红色,可以没有 第一条命令...

    命令

    grep 'keyword' test.log -C500 --color
    grep -C500 'keyword' test.log --color

    说明:

    1. 第一个命令和第二个命令都可以
    2. keyword:是要查询的关键字,关键字可以不用引号引起来
    3. test.log:是文件名称,即要查询的文件
    4. -C500:显示的行数,显示500行,可以没有
    5. --color:颜色,给关键字颜色便于查找,默认红色,可以没有
    6. 第一条命令好像显示的(日志)内容不全面,有遗漏;而第二种,则是根据关键字查询上下500行

    其他

    $grep -10 ‘123’ test.log        //打印匹配行的前后10行

    $grep -C 10 ‘123’ test.log    //打印匹配行的前后10行

    $ grep -A 10 -B 10 ‘123’ test.log     //打印匹配行的前后10行

    $grep -A 10 ‘123’ test.log     //打印匹配行的后10行

    $grep -B 10 ‘123’ test.log    //打印匹配行的前10行

    grep ‘123’ test.log| grep ‘456’    //显示既匹配 ‘123’又匹配 ‘456’的行
    grep -n ‘123’ test.log                 //搜索test.log中满足123的内容的行号
    tail -n +50 test.log                     //查看test.log指定行号后的内容,比如50行
    sed -n ‘50,100p’ test.log           //查看test.log的第50行到100行    #记得p字母

    参考文章

    原文链接:https://blog.csdn.net/huashao0602/java/article/details/78018743

    展开全文
  • linux获取关键字所在的行数

    千次阅读 2019-08-10 20:14:55
    linux中,通过关键字对日志进行抓取,然后将某一时间以后的日志下载下来。 解决思路: 先grep 关键字和需要下载的日志的起始时间,记录下行数。 再 grep 关键字,选取之后的行号 获取行号 '"cat %s|grep "%s"|...

    要解决的问题

    在linux中,通过关键字对日志进行抓取,然后将某一时间以后的日志下载下来。
    解决思路:

    1. 先grep 关键字和需要下载的日志的起始时间,记录下行数。
    2. 再 grep 关键字,选取之后的行号

    获取行号

    '"cat %s|grep "%s"|grep -n "%s"|cut -d ":" -f 1|head -n 1"%(logPath,time,keyword)
    在打开一个文件之后,首先提取关键词
    grep -n 可以在grep的时候顺便输出行号


    grep命令小结

    命令作用
    grep -c计算搜寻到的关键词的次数
    grep -i忽略大小写的不同
    grep -v将不含关键词的行输出出来
    grep -n显示行号

    cut -d “:” -f 1
    以":"为分隔符,分割后取出第一个字符,即为行号


    cut命令小结

    命令作用
    cut -b根据字节划分内容
    cut -c根据字符选取内容
    cut -d自定义分割符
    cut -f以cut -d 规定的分隔符选取字段
    展开全文
  • 比如文档是: name a name b name c 要提取abc,最好使他们成为单独一个个的变量
  • ps aux |grep tm1s 转载于:https://www.cnblogs.com/hujiapeng/p/10340809.html
  • ps aux | grep "common" |grep -v grep| cut -c 9-15
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • shell 获取关键字后几位字符

    千次阅读 2021-01-29 00:32:52
    624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748) Locked ownable synchronizers: - None 比如我想获取关键字 ...
  • 里面的cmd必须要有输出,echo,或者printf 才能获取文件流,才能获得相应的返回值。  system(“cmd”);这个返回的是整型值,system返回值由cmd的返回值和命令执行中接受到的命令组成,其中cmd返回值,占高...
  • [Linux] volatile关键字

    2021-04-17 15:42:53
    volatile关键字 作用:修饰一个变量,保持其内存可见性,防止编译器过度优化 内存可见性 修饰一个变量后,cpu每次访问该变量,都需要重新从内存中加载数据 例如,现在要对一个整数a进行++操作,cpu会先将a从内存中...
  • shell命令: grep -rn "XXX" | grep -oE "[0-9]{1,3}\.[0-9]{1,3}...(其中XXX是关键字) 1、获取日志信息 grep -rn "XXX" 2、匹配IP地址信息 -oE "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" 3、分组统计 |so
  • 想要在Linux下面,找之前不知道放到哪里的一个tomcat的文件。 【折腾过程】 1.最后是参考: linux查找文件命令find – 发芽的石头 – 博客频道 – CSDN.NET 去搜: root@bogon:openfire# find / -name '*tomcat*' /...
  • 获取百度关键字搜索内容 https://www.cnblogs.com/w0000/p/bd_search_page.html Github headers内的参数,仅有UA时,返回结果不完整,找个request头,增加一些参数。 import requests if __name__ == '__main__': #...
  • 1: 查找文件中关键字所在行数信息 grep -n "关键字" filePath 2:截取指定行之间的内容到新文件中 sed -n '开始行数,结束行数p' filePath >> newFilePath sed -n '700,1250p' file.log >> newOut.log
  • 不显示包括某关键字的行 grep -v
  • 假设有如下定义的一维数组: intarray[8]; 那么,这个 array[] 数组占据多少个字节容量...可以看到,通过sizeof(array)获取array数组的容量,就是获取数组所占据的内存字节数。 那么,我们可以通过sizeof关键字获...
  • AWK是一种处理文本文件的语言,是一个强大的文本分析工具。这篇文章主要介绍了Linux 中awk 提取包含某个关键字的段落实例代码,需要的朋友可以参考下
  • 一个人自尊心被任意的践踏,蹂躏,原来就是这样的感觉 ...man命令是linux中最为常用的帮助命令,将要获取帮助的命令作为参数运行man命令就可以获取相应的文档帮助了 man -k关键字 可以用来查询包含该关
  • Linux】文本处理、关键字截取

    千次阅读 2017-08-31 14:50:47
    cutcut命令可以将一行文字按照指定字符切分成多段并取出某一段,或者直接指定要取出的字符位置。 格式:cut -d '指定字符' -f数字 //切分并取出指定列 cut -c 区间 //取出指定字符位置的字符串,区间用-表示,如2-4...
  • 本文将使用命令awk将具有某个关键字的段落提取出来。准备数据"Finalizer" #3 daemon prio=8 os_prio=0 tid=0x00007fb2dc1aa800 nid=0x63f6 in Object.wait() [0x00007fb2be61f000]java.lang.Thread.State: WAITI...
  • cat xxx.log|grep -C 2 'keyword'  
  • ●man命令是Linux中最为常用的帮助命令,将要获取帮助的命令作为参数运行man命令就可以获取相应的文档帮助 ●man文档分为很多类型: 部分 类型 1 用户命令 2 内核系统酒用 3 库函数 4 特殊文件和设备 5 文件格式和...
  • Linux获取帮助

    2015-04-09 11:30:39
    manual简写: man ls:   man -k 关键字支持模糊查找   INFO(更详细) /关键字可以进行查找   DOC 命令: 命令ls 浏览:
  • 原因:register变量保存在寄存器中,获取的是内存的地址。 ③被register修饰的变量必须是cpu能接受的类型。   2.static (1)修饰局部变量 作用:延长变量的生命周期,直至整个程序结束再释放。 ...
  • linux grep 搜索子目录关键字 下一行

    千次阅读 2017-04-20 10:50:41
    搜索子目录关键字 grep -n "keyword" -r ./ 过滤文件tt.log中,关键字为keyword1的下一行,在过滤出来的内容中再过滤出包含keyword2的行 cat tt.log|grep A 1 "keyword1"|grep "keyword2"
  • Linux——获取帮助

    2015-12-21 11:14:18
    -h、–help 几乎所有命令都可以使用-h或–help...man -k 关键字 查看文档标题中包含关键字的所有文档info info 想要获取帮助的命令 将想要获取帮助的命令作为参数运行info命令即可获取相应的文档帮助。man和info命令
  • Linux批量杀死包含某个关键字的进程

    千次阅读 2014-07-01 18:40:59
    ps -ef|grep ./amplxe-gui|...批量杀死包含关键字“./amplxe”的进程。 "ps -ef" ——查看所有进程 "grep ./amplxe-gui" ——列出所有含有关键字"./amplxe-gui"的进程 "grep -v grep" ——在列出的进程中去除含
  • linux获取日志指定行数范围内的内容

    千次阅读 2020-07-02 15:03:44
    1 首先得到他们所在的行号: -n 选项显示行号 grep '"2037945"' aaa.log -n 2 使用sed -n ‘开始行,结束行p’ filename sed -n "18069169,18069369p" logs/aaa.log
  • 场景:ps -aux命令后获得其中关键字 [root@localhost ~]# ps -aux | tail root 110291 0.0 0.0 0 0 ? S 15:53 0:00 [kworker/u256:0] root 112248 0.0 0.0 0 0 ? S 16:26 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 88,010
精华内容 35,204
关键字:

linux获取关键字

linux 订阅