sed和awk

来源:互联网 发布:软件业务流程图怎么画 编辑:程序博客网 时间:2024/05/08 03:21

备忘一下,只是最最简单的用法

一、sed

sed可以删除、修改文件

文件内容:

$ cat 1.txt
gaofeng 45 56 44
cc       77 88 99
yangyang 3 4 5

例子1

$ sed 's/4/new/g' 1.txt     --s表示替换,把字符4替换为new
gaofeng new5 56 newnew
cc       77 88 99
yangyang 3 new 5

$ sed 's/4/new/' 1.txt     --不加g,只替换每行第一个4
gaofeng new5 56 44
cc       77 88 99
yangyang 3 new 5

$ sed 's/.4/&new/g' 1.txt  --.4是正则表达式,&表示在4后面追加
gaofeng 4new5 56 4new4
cc       77 88 99
yangyang 3 4new 5

二、awk

--awk中的脚本,必须用单引号引起来。可以有多个块,包括一个开始块,多个中间块,一个结尾块。

  print语句后的多个参数,如果用逗号分割,会按照FS,即空格打印。如果没有逗号,就是多个参数之间连接。 字符串需要双引号。

  也支持printf语句

  $0 表示这一行的字符串 $1表示第一个字段。NF表示字段的个数,FS表示分割符,默认是空格。

  NR是行号,RS是行分割符,默认是‘\n’. 分割符都是可以重新自定义的。

$ awk 'BEGIN {print "this is begin"};{print "hello,"$1}' 1.txt   
this is begin
hello,gaofeng
hello,
hello,cc
hello,yangyang

$ awk 'BEGIN{RS=""}; {print NR,NF;system("date")}' 1.txt  --通过system()调用shell命令,主要命令要用“”包起来。
1 4
Sun Feb 26 13:35:54     2017
2 8
Sun Feb 26 13:35:54     2017


如下例,每个段前都可以有一个条件,可以是正则表达式,也可以是类似NF<1之类。

$ awk 'BEGIN {print "this is begin"}; {print "hello,"$1}; /^\n$/ {print}; END {print "this is the END"}' 1.txt
this is begin
hello,gaofeng
hello,
hello,cc
hello,yangyang
this is the END


awk的语法类似c,也类似脚本语言。可以编写代码进行信息统计,平均成绩计算等。

$ awk 'NF>0 {print $1":"($2+$3+$4)/3}' 1.txt
gaofeng:48.3333
cc:88
yangyang:4

一篇好文章:http://www.cnblogs.com/qieerbushejinshikelou/archive/2013/11/20/3420519.html

0 0