什么是sed和awk

        sed和awk是Linux环境下数据的处理工具,可以完成对数据的增删改查的功能。
        sed处理时是以行尾单位的,awk处理数据时以字段为单位。

sed

        用法:sed  【选项】 【动作】 【文件】 
        以行为处理单位
    选项:
        -n:安静模式,仅显示被处理的行,如果改行是被删除的,则不显示
        -e:add the script to the commands to be executed(用于连接多个动作脚本)
        -r:表示命令使用的动作时延伸型的正则表达式
        -i:直接在文件上进行编辑,而不是输出到屏幕上
        -f:使用脚本文件,即动作编辑在脚本文件中,支持一个脚本文件中使用多个动作
    动作:[n1[,n2]]function
        [n1[,n2]]不一定有,function如下:
        c:行取代,用新行(字符串)替换旧行
        d:删除行
        i: 在当前行前面插入一行数据(字符串)
        p:打印行
        s:s/regexp/replacement/  用新字符串替换旧字符串。s后面接分隔符,默认为/
    练习:
        测试文件:test.c
#include <stdio.h>
int main()
{
printf("This is Main()!\n");
return 0;
}

      删除第2行,并用 return 1; 取代第6行
windeal@ubuntu:~/Windeal/Test$ sed -e '2d' -e '6c \\treturn 1;' test.c
#include <stdio.h>
int main()
{
printf("This is Main()!\n");
return 1;
}
windeal@ubuntu:~/Windeal/Test$

    在动作脚本中    \\t是为了在return前面插入tab,需要两个转义字符
    使用-f脚本选项,在第6行前面插入printf("Hello!\n");  并将第5行的Main替换为MyMain
        
windeal@ubuntu:~/Windeal/Test$ sed -f script test.c
#include <stdio.h>
int main()
{
printf("This is MyMain()!\n");
printf("hello!\n");
return 0;
}
windeal@ubuntu:~/Windeal/Test$

awk

    用法:
         1      mawk  [-W  option]  [-F value] [-v var=value] [--] 'program text' [file ...]
2 mawk [-W option] [-F value] [-v var=value] [-f program-file] [--] [file ...]

         用法1和2的区别在于是直接使用脚本命令还是有脚本文件,即脚本是直接使用还是写在一个文件里
    选项
        -W 表示一些特殊选项(还没怎么用到过)

        -F 表示分隔符
        -v 定义变量,或给变量赋值
        -f  使用脚本
    特殊变量
        NF    每行的字段数
        NR    当前处理行
        FS    分隔符
    脚本形式:
        An  AWK  program  is  a sequence of pattern {action} pairs
and function  definitions.
        即又[条件][动作] [条件][动作]...组成
        [条件]支持逻辑运算符 < > = >= <= ==
        支持格式化输出和if语句
    练习:
        测试数据    stu.txt
No.	Name	Chinese	Math
001 Jack 80 85
002 Jane 90 90
003 Ben 85 90
004 Alice 85 95
        1. 输出行号,第1个字段、第3个字段、第4个字段
windeal@ubuntu:~/Windeal/Test$ awk '{print "line:" NR "\t" $1 "\t" $3 "\t" $4}' stu.txt
line:1 No. Chinese Math
line:2 001 80 85
line:3 002 90 90
line:4 003 85 90
line:5 004 85 95
windeal@ubuntu:~/Windeal/Test$

    注意所有文本要使用双引号
2.输出数学考90的同学
windeal@ubuntu:~/Windeal/Test$  awk 'NR==1 {print} NR>1&&$4==90{print}' stu.txt
No. Name Chinese Math
002 Jane 90 90
003 Ben 85 90
windeal@ubuntu:~/Windeal/Test$


         3 支持格式化输出和if语句
windeal@ubuntu:~/Windeal/Test$ awk '{if(NR==1) printf "%10s %10s %10s %10s %10s\n",$1,$2,$3,$4,"Sum"}\
NR>=2{Sum=$3+$4
printf "%10s %10s %10s %10s %10s\n",$1,$2,$3,$4,Sum}' stu.txt
No. Name Chinese Math Sum
001 Jack 80 85 165
002 Jane 90 90 180
003 Ben 85 90 175
004 Alice 85 95 180
windeal@ubuntu:~/Windeal/Test$

Sum=$3+$4
后面需要换行,还不清楚为什么。

sed和awk简介的更多相关文章

  1. 学习笔记之Shell脚本学习指南 & sed与awk & 正则表达式

    正则表达式_百度百科 http://baike.baidu.com/link?url=ybgDrN2WQQKN64_gu-diCqdeDqL8LQ-jiQ-ftzzPaNUa9CmgBRDNnyx50 ...

  2. linux shell必知必会sed、awk

    sed是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往 ...

  3. 【Linux进阶】使用grep、find、sed以及awk进行文本操作

    目录 一.元字符 二.grep命令 1. 过滤出包含某字符串的行 2. 过滤出以某字符串开头(结尾)的行 3. 过滤出包含某字符串及其相邻的行 4. 过滤出不包含某关键字的行 5. 过滤出包含多个字符 ...

  4. Sed、Awk单行脚本快速参考

    文本间隔: # 在每一行后面增加一空行 sed G awk '{printf("%s\n\n",$0)}' # 将原来的所有空行删除并在每一行后面增加一空行. # 这样在输出的文本 ...

  5. sh脚本学习之: sh脚本 、sed、awk

    sh脚本 sh命令的批处理文件,支持更复杂的逻辑. Shell中的变量 参数 $0 当前脚本路径 $1....$n 脚本执行对应的第n个参数 条件判断 文件判断 test [op] path e存在 ...

  6. 一个利用sed和awk处理文本的小栗子

    这两天做<Linux操作系统>课程的作业,碰到了一个题目,感觉很有意思,很考验对awk掌握的熟练度,故特意拿来分享. 首先说题目是这样的,有这样一段文本: RECORD #这是多余的注释行 ...

  7. Pyp 替代sed,awk的文本处理工具

    Linux上文本处理工具虽不少,像cut,tr,join,split,paste,sort,uniq,sed,awk这些经典工具让人眼花缭乱,而且都太老了,使用方法都不太人性化,尤其awk,语法简直反 ...

  8. sed and awk学习笔记

    sed and awk 背景 awk起源追溯至sed和grep,进而追溯至共同的行编辑器ed.实用工具grep来源于ed命令:g/re/p .实用工具awk和sed有一个共同的选项-f用于指定脚本的名 ...

  9. 三大文本处理工具grep、sed及awk的简单介绍

    grep.sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了.只不过,相比较而言,sed和awk功能更 ...

随机推荐

  1. MYSQL基本操作总结

    (1)cd c:/ //进入c:\-> (2)mysql -h 127.0.0.1 -u root -p //进入数据库 SHOW DATABASES; //显示所有数据库 CREATE DAT ...

  2. 根据iframe获取window

    今天使用layui弹出窗口,需要将函数写在弹出的窗口,但是按钮事件是在父层窗口绑定的,这样就要在父层窗口调用子层窗口的函数. 子层函数与父层函数 function topup() { console. ...

  3. 20145313张雪纯 《Java程序设计》8周学习总结

    20145313张雪纯 <Java程序设计>8周学习总结 教材学习内容总结 java.util.logging包的优点在于提供了日志功能相关类与接口,不必额外配置日志组件就可以在标准jav ...

  4. 第八篇:Spark SQL Catalyst源码分析之UDF

    /** Spark SQL源码分析系列文章*/ 在SQL的世界里,除了官方提供的常用的处理函数之外,一般都会提供可扩展的对外自定义函数接口,这已经成为一种事实的标准. 在前面Spark SQL源码分析 ...

  5. 梅森素数 判定总结 - Lucas-Lehmer算法 & Miller-rabin算法

    梅森素数 定义: if m是一个正整数 and 2^m-1是一个素数 then m是素数 if m是一个正整数 and m是一个素数 then M(m)=2^m-1被称为第m个梅森数 if p是一个素 ...

  6. webstorm自动换行

    1.文件 — — 设置 2. 编辑器 — — 编辑器 — — 在编辑窗口使用软换行(勾选)

  7. $.ajax 的用法以及参数设置

    url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如put和 ...

  8. JS书籍推荐

    JS书籍推荐 一.总结 一句话总结: 二.JS进阶书籍 第一阶段:<JavaScript DOM编程艺术> 看这本书之前,请先确认您对Javascript有个基本的了解,应该知道if el ...

  9. .net core mvc部署到IIS导出Word 提示80070005拒绝访问

    项目中相信大家经常会遇到导出Word.Excel等需求,在实际开发环境中,一般不会出现什么问题,但当发布到IIS上后可能会遇到各种各样的问题,一般都是权限的问题.前几天把公司项目发布后,出现Word导 ...

  10. IdentityServer4在Asp.Net Core中的应用(一)

    IdentityServer4是一套身份授权以及访问控制的解决方案,专注于帮助使用.Net 技术的公司为现代应用程序建立标识和访问控制解决方案,包括单点登录.身份管理.授权和API安全. 下面我将具体 ...