sed和awk常用方法

来源:互联网 发布:淘宝美工最低要求 编辑:程序博客网 时间:2024/06/06 15:54

sed和awk是比较基础的类Unix系统中批量处理文本的好东西。sed负责做行的编辑,awk负责做列编辑。这里将说一点这方面的知识。需要明白的一点就是他们的处理都是按照行来做的处理。

sed

命令格式

sed [options] 'command' file(s)  sed [options] -f scriptfile file(s)  

基本的命令格式:

[address[,address]][!]command[agruments]

选项

选项 意义 -n 安静模式 -e 输入多个编辑指令 -i are neat -f 引导sed脚本文件名。

常用命令

选项 意义 a 追加 d 删除命令 s 替换命令,支持正则的替换 i 插入 p 输出,通常和-n一块使用 c 将制定地址直接替换 r [address]r file,将文件内容插入到address位置 w [address]w file,将address位置内容写入到文件中

sed实例

参考

awk

命令格式

awk [-F  field-separator]  'commands'  input-file(s)

最基本用法

$ ps aux | awk '{print $2}'

这样将会打印出当前在运行的进程的编号。如果你想在首部尾部添加自己的打印

$ ps aux | awk 'BEGIN {print "this is head"} {print $2} END {print "this is tail"}'

在awk中内置的变量

变量 意义 ARGC 命令行参数个数 ARGV 命令行参数排列 ENVIRON 支持队列中系统环境变量的使用 FILENAME awk浏览的文件名 FNR 浏览文件的记录数 FS 设置输入域分隔符,等价于命令行 -F选项 NF 浏览记录的域的个数 NR 已读的记录数 OFS 输出域分隔符 ORS 输出记录分隔符 RS 控制记录分隔符

在最后实例里面计算平局值的时候就使用了NR。

printf语法

awk  -F ':'  '{printf("filename:%10s,linenumber:%s,columns:%s,linecontent:%s\n",FILENAME,NR,NF,$0)}' /etc/passwd

awk运算符

在处理文本的时候可以做一些简单的运算

运算符

= += -= = /= %= ^= *=

逻辑

|| 逻辑或
&& 逻辑与
~ ~! 匹配正则表达式和不匹配正则表达式
< <= > >= != == 关系运算符

数学计算

    • 加,减
  • / & 乘,除与求余
    • ! 一元加,减和逻辑非
      ^ * 求幂
      ++ – 增加或减少,作为前缀或后缀

实例

计算最大值、合计、平均值

参考
在awk里面执行分为两个单元,每行处理的时候在前面那个括号里执行。END之后{}中的内容就是用于做

$ cat test.log0 0 147.0860 10 141.2690 20 100000 30 2805.220 40 152.0030 50 144.7620 60 144.926

最大值

cat test.log | awk '{if(m<$3) m=$3} END{print m}'{  if(m<$3) m=$3}END {  print m}

合计

cat test.log | awk '{m+=$3} END{print m}'{  m+=$3}END {  print m;}

平均值

cat test.log | awk '{m+=$3} END{print m}'{  m+=$3}END {  print m/NR;}
0 0
原创粉丝点击