美文网首页
Linux文本处理

Linux文本处理

作者: 朽木1313 | 来源:发表于2018-08-06 09:23 被阅读0次

    技术点:

    1.正则提取

    sed 用提取变量替换
    sed 's/.*toid\=\([0-9]*\).*/\1/g'

    2.查找系统占内存最高的10个程序

    按照实际物理内存排序:ps aux --sort=-rss 支持 sort 参数,sort 参数 + 表示正序,-表示倒叙 ps aux --sort=-rss,-%cpu 表示先按物理内存再按cpu排列

    3.查找系统内各程序占内存最高10个

    上面只能看到各个进程的排序,但有时候一个程序可能启动数十个进程,这样子分析起来比较慢了。这里可以先按照 awk程序做过滤后排序输出,sort记得加上 n 参数表示按照数字而不是字符串排序

    ps -aux | awk 'NR!=1{a[$11]+=$5;} END {for(item in a) print item " " a[item];}' | sort -rnk2 | head -n 10

    4.批量kill进程

    kill -9 $(ps -aux | grep 'node /usr/local/bin/pm2 l' | grep -v grep | awk '{print $2}')

    附录:

    一、sed命令简介

    sed 是流文本编辑器,可以用来做流的替换、删除、匹配等操作。
    sed简明教程

    1. s参数替换
    • 文档开头加注释: sed 's/^/#/g'
    • 文档结尾加封号: sed 's/$/;/g'
    2. i参数回写修改流

    一般 sed 只将数据修改输出,加上 i 参数可以将改动回写源文件

    3. 指定替换范围

    s参数前面数字可指定替换行范围
    1,s/pattern//g, 1,2s/pattern//g, ,2s/pattern//g

    • 最后的 g 参数表示替换行内所有匹配项
    • 假若需要替换第一个匹配 sed 's/s/S/1' my.txt
    • 第二个及以后的匹配 sed 's/s/S/2g' my.txt
    4.圆括号

    patter段里面由括号括起来的正则表达式匹配内容可以当成变量使用,引用方式: \1 \2 \3

    此外还有i a d P N参数
    • i 在匹配项前面添加替换内容
    • a 在匹配项后面添加内容
    • d 放在 g 参数位置,删除匹配行
    • n 不显示匹配项,可以减少输出,减少干扰
    • p g 参数位置,打印匹配项

    二、awk命令简介

    AWK命令非常强大,用来做数据统计,不需要写编程脚本,可能awk一行命令就搞定了。

    AWK简明教程

    1.内建变量

    在写脚本时可以使用一些程序级变量

    变量名 含义
    $0 整行
    1 -n 分割后各段的引用
    NF 切割后字段数
    NR 当前行号,处理的第几行
    FS 使用分割符,默认为 tab
    RS 记录分割符,默认为换行符
    1.过滤匹配行
    • 通过字段逻辑运算进行布尔过滤
      如:awk '$3==0 && $6=="LISTEN" ' netstat.txt
      中间运算符还有:> >= < <= != ~, '~' 表示包含
    • 输出时携带表头:awk '$3==0 && $6=="LISTEN" || NR == 1' netstat.txt
    • 格式化输出:awk '$3==0 && $6=="LISTEN" || NR==1 {printf "%-20s %-20s %s\n",$4,$5,$6}' netstat.txt
    • 指定分割符: awk -F:,多个分割符awk -F '[:,]'

    示例:awk '$6 !~ /WAIT/ || NR==1 {print NR,$4,$5,$6}' OFS="\t" netstat.txt

    2.拆分文件

    有点像mysql的group,要根据第6列不同的数据值拆分文件
    awk 'NR!=1{print > $6}' netstat.txt

    3.数据统计

    awk可以做累加、计数、求合、判断这些基本逻辑

    • 输出文件总和: ls -l | awk '{sum+=$5} END {print sum}'
    • 不同进程使用内存大小统计: ps -aux | awk 'NR!=1{a[$11]+=$5;} END {for(item in a) print item " " a[item]" KB";}'

    相关文章

      网友评论

          本文标题:Linux文本处理

          本文链接:https://www.haomeiwen.com/subject/mravvftx.html