您的位置:首页 > 其它

sed和awk

2017-02-26 14:23 183 查看
备忘一下,只是最最简单的用法

一、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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: