awk&sed日常用法记录
来源:互联网 发布:数字正则表达式 java 编辑:程序博客网 时间:2024/05/18 13:31
sed
1.正则表达式
sed默认是支持正则表达式的,只不过在命令行使用时需要转义,
echo “aaa bbb “|sed -r ‘s/(.)/A/g’ // -r启用正则表达式
echo “aaa bbb “|sed ‘s/(.)/A/g’ // 不起用正则,则需要转义
AAA AAA
2.替换多个值
echo abc | sed ‘s#(a)#\1\133#’
多次替换,比如将a->1,b->2
sed ‘s/a/1/g; s/b/g/g’ a
3.指定范围
sed ‘1,5{s/a/1/g; s/b/g/g}’ a
awk
1.管道getline
function dofile(fname) { while (getline <fname > 0) { if (/^@define[ \t]/) { # @define name value name = $2 $1 = $2 = ""; sub(/^[ \t]+/, "") symtab[name] = $0 } else if (/^@include[ \t]/) # @include filename dofile($2) else { # Anywhere in line @name@ for (i in symtab) gsub("@" i "@", symtab[i]) print } } close(fname)}BEGIN { if (ARGC == 2) dofile(ARGV[1]) else dofile("/dev/stdin")}
2.awk管道:同一时刻只能有一个管道
tmpfile= “/tmp/telephone.tmpfor (name in telephone)print name "/t" telephone[name]>tmpfileclose(tmpfilejsystem("sort < tmpfile“)
临时性文件必须在调用system() 之前关闭,以确保任何缓冲区输出都正确地记录在文件内。
先来看个小例子:
echo "21 2> 3 51> 17 23"|awk '{> first[NR]=\$1> second[NR]=\$2> }END{> print "====打印第 1 列并排序:====" >> "testAwkPipe.txt"> for(i in first){> print first[i]|"sort -n >> testAwkPipe.txt"> }> print "====打印第 2 列并排序:====" >> "testAwkPipe.txt"> for(j in second){> print second[j]|"sort -n >> testAwkPipe.txt"> }> }' cat testAwkPipe.txt====打印第 1 列并排序:====2317212351====打印第 2 列并排序:====怎么样?结果是不是很诡异呢?这是因为我们在awk中使用了管道后没有close的缘故,这样前一次管道里的数据和文件描述符(指针)还建立着连接,因而,每次排序都是全文排序,下面我们在每个for循环外面加上一句close来关闭管道,看看结果如何: echo "21 2> 3 51> 17 23"|awk '{> first[NR]=\$1> second[NR]=\$2> }END{> print "====打印第 1 列并排序:====" >> "testAwkPipe.txt"> for(i in first){> print first[i]|"sort -n >> testAwkPipe.txt"> }> close("sort -n >> testAwkPipe.txt")> print "====打印第 2 列并排序:====" >> "testAwkPipe.txt"> for(j in second){> print second[j]|"sort -n >> testAwkPipe.txt" } close("sort -n >> testAwkPipe.txt")}'> > >
cat testAwkPipe.txt
====打印第 1 列并排序:====
3
17
21
====打印第 2 列并排序:====
2
23
51
现在的结果就是正确的了,这是因为for循环结束后管道里的数据已经和文件断开了连接,每次排序的数据和前一次无关。
3.getline用法
getline < file 从file 文件中,读取下一条记录,存入$0,并更新NF, NR 与FNR
getline var < file 从file 文件中,读取下一条记录,存入var,并更新NF, NR 与FNR
cmd | getline 从外部命令cmd 读取下一条记录,存入$0,并更新NF
cmd | getline var 从外部命令cmd 读取下一条记录,存入var
4.多层管道
awk ‘BEGIN{for(i=0;i<10;i++){print i|“sort | uniq -c > x”}}’
- awk&sed日常用法记录
- AWK问题日常记录
- sed awk 基本用法
- awk sed 的入门记录
- awk sed学习笔记 记录
- awk sed grep 用法小结
- sed和awk用法扼要
- grep awk sed常用用法
- grep,awk,sed简单用法
- awk、sed和cut 学习记录
- grep sed awk find的用法归纳
- 关于unix shell get、sed、awk用法
- sed和awk的基本用法
- grep、sed和awk基本用法汇总
- awk, sed的一些简单用法
- shell中管道、grep、sed、awk用法
- grep sed awk find的用法归纳
- Linux sed和awk的用法
- 《算法竞赛入门经典2ndEdition 》例题3-1 TeX中的引号(Tex Quotes, Uva 272)
- protel99se进阶视频教程(手把手教你画51单片机开发板)
- linux下 mysql字符集的修改
- U3d,解析jsondata提示错误.InvalidCastException: Instance of JsonData doesn't hold an int LitJson.JsonData.
- 使用Anemometer基于pt-query-digest将MySQL慢查询可视化
- awk&sed日常用法记录
- 类别和继承的区别
- linux 常用调试命令
- 实现Android图片轮播
- 英语速成的窍门—你需要掌握这些【胶水词】
- Java基础一
- Java数字时钟
- 九度oj-1136-Number Steps
- 使用msvc编译的rustc