本文共 1527 字,大约阅读时间需要 5 分钟。
sed和awk是比较基础的类Unix系统中批量处理文本的好东西。sed负责做行的编辑,awk负责做列编辑。这里将说一点这方面的知识。需要明白的一点就是他们的处理都是按照行来做的处理。
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位置内容写入到文件中 |
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"}'
变量 | 意义 |
---|---|
ARGC | 命令行参数个数 |
ARGV | 命令行参数排列 |
ENVIRON | 支持队列中系统环境变量的使用 |
FILENAME | awk浏览的文件名 |
FNR | 浏览文件的记录数 |
FS | 设置输入域分隔符,等价于命令行 -F选项 |
NF | 浏览记录的域的个数 |
NR | 已读的记录数 |
OFS | 输出域分隔符 |
ORS | 输出记录分隔符 |
RS | 控制记录分隔符 |
在最后实例里面计算平局值的时候就使用了NR。
awk -F ':' '{printf("filename:%10s,linenumber:%s,columns:%s,linecontent:%s\n",FILENAME,NR,NF,$0)}' /etc/passwd
在处理文本的时候可以做一些简单的运算
= += -= = /= %= ^= *=
|| 逻辑或
&& 逻辑与 ~ ~! 匹配正则表达式和不匹配正则表达式 < <= > >= != == 关系运算符在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;}
转载地址:http://fdfmf.baihongyu.com/