分享下处理数据分析时, shell 两个比较基础的工具

Linux Shell工具之 sed/awk

sed 指令

非交互式的字符流编辑器,支持对多文件多行的管道处理

sed [option] 'command' f.txt

sed -n '2,3p' f.txt 输出文件的第2到3行

sed -n '/ok/p' f.txt 输出文件中匹配ok的行

sed -i 's//ok/g' f.txt 替换文件中mac字符为ok g表示全局替换

sed -i '/mac/d' f.txt 删除文件中匹配mac字符的行

sed -i 是直接在原文件上修改

sed -e 不在原文件上修改,输出到终端,可以借助cat 命令 > 输出到文件中,达到和sed -i 一样的效果

 

awk 指令

awk -F"," '条件{指令}' 包含多个条件时,通过分号隔开.默认的分隔符是空格

awk -F"," 'NF==7{print $0}' 如果读取行的字段数是7则输出此行

awk -F"," 'if(NF==7){print $0}' 条件语句

awk -F"," '{name="jim";age=10;print name}' a.txt 自定义变量

awk -F"," '/keys/{print $0}' 通过匹配模式过滤

free|awk '/Mem/{print $4}' 查看剩余

ifconfig em1|awk '/inet/{print $2}' 查看Ip

uptime |awk '{print $1,$10}' 查看cpu使用率

 

awk [选项] ' BEGIN{编辑指令 } {编辑指令} END{编辑指令}' 文件

  • 在所有行前处理,BEGIN{}

读入第一行文本之前执行(执行1次),一般用来初始化操作

  • 逐行处理,{}

逐行读入文本执行相应的处理(1行执行1次),是最常见的编辑指令块

  • 在所有行后处理,END{}

处理完最后一行文本之后执行(执行1次),一般用来输出处理结果

三者可单独使用,也可同时使用。 所有命令都要写在{}里

 

awk 'BEGIN{print "hello"}条件{print "a"}END{print "over"}' a.txt

ifconfig em1 |awk 'BEGIN{print "开始a"}/inet/{print $2}END{print "结束o"}'

胜象大百科