1、简介

  • 文本编辑器 非交互式的编辑器 编程语言
  • 功能:对文本数据进行汇总和处理 是一个报告生成器 能够对数据进行排版
  • 工作模式:行工作模式 读入一行 将整行内容存在$0里,一行等于一个记录 记录分隔符默认换行符,使用内置变量FS(字段分隔符)分割一行 存到$1-$100 字段 列,$NF=最后一列
  • 与sed不同点:sed主要处理行 awk主要处理列,sed处理动作必须与文件内容相关 awk处理动作可以与文件内容无关 动作要用{}

语法:awk 选项 ''模式{动作}'' 文件列表

awk 'BEGIN{sum=0}{sum++}END{print sum}' passwd 统计行
BEGIN模式--处理前 标准模式 END模式--处理完(三种模式可以独立存在)

2、分隔符

-F 指定分隔符

  • 默认使用空白
  • 单个字符
  • 复合分隔符 多个字符组成的分隔符 ":/"
  • 多个分割符 同时指定多个分隔符 " +|%"
  • 每个字符为一字段 以空为分隔符 ""

3、表达式

  • 符串加“”
  • x ~ /y/ 匹配正则
  • x !~ /y/ 不匹配正则 == != ~ !
  • 数值比较不需要加“” > < >= <= == !=
  • 算术运算 -x 负数 +x(x) 正数 x+y x-y x*y x/y x%y x**y x^y (x的y次幂)
  • 逻辑运算符 && || !  例:awk -F: '$3>=59&&$3<99{print}' /etc/passwd uid为59-99

4、print

  • 输出 print 各个输出字段之间用逗号分隔 而输出时默认以空白分隔
  • 后面如果不指定字段 那么就会打印一整行
  • 输出时默认是有换行符的
  • printf 格式化输出 默认没有换行

5、内置变量

  • $0 表示整行的内容
  • $1~$100 第几列
  • NF 当前行的字段数 $NF--最后一段 $(NF-1)--倒数第二段
  • NR 处理的记录数(一般可以看成行号) 绝对记录数
  • FNR 当前文件所处理的记录数 相对记录数--行号
  • FS 字段分隔符 默认空白
  • RS 记录分隔符 即行的分隔符
  • awk 'BEGIN{FS=":"}/sh$/{print $1,$3}' /etc/passwd 指定字段分隔符
  • awk 'BEGIN{RS=":"}{print NR,$0}' passwd NR 显示记录个数 指定记录分隔符

6、自定义变量

  • 命名 字母 数字 下划线组成 不能以数字开头
  • 赋值 变量名=数值
  • 变量名=“字符串” 此处一定有引号
  • 取消变量 delete name
  • 变量的长度 length(name)

7、算术运算

  • a+=b 相当于 a=a+b
  • b=a++ 相当于 b=a a=a+1 a++ 先赋值 再自增
  • b=++a 相当于 a=a+1 b=a ++b 先自增 再赋值
  • 在BEGIN模式可以直接计算 awk 'BEGIN{print 2+2}'
  • 在标准模式进行运算 echo |awk '{print 2+2}'

例:awk 'BEGIN{a=10;b=a++;print a,b}'  得:a=11 b=10

8、示例

命令 说明
awk -F: '$1=="root"{print}' /etc/passwd 用户为root,以":"为分割符
awk -F: '$1~/root/{print}' /etc/passwd 用户名包含root
awk -F: '$0~/root/{print}' /etc/passwd 包含root的行
awk -F: '$3%2==1{print}' /etc/passwd uid为奇数
awk -F: '{print $1"\t"$3"\t"$4}' /etc/passwd 结果以制表符分隔(字符加“”)
awk -F: '{print $2,$1}' /etc/passwd 交换$1 $2
seq 100|awk '$0%7==0 ||$0~/7/' 打印100以内能被7整除或者包含7的数
awk '{print $0"\n"}' passwd 每行下打印空行
ifconfig |awk '/broadcast/{print $2}' 打印出IP地址
ifconfig ens33|awk 'FNR==2{print $2}' NR=2 第二行
df -Th|awk -F " +|%" '/\/$/{print $6}' 打印出根分区已用量
awk -F: '{print $NF}' passwd $NF 最后一列
awk '{print FNR,$0}' passwd 给文件编号
awk -F: '$1~/^.{3}$/{print $1":"$3}' /etc/passwd 打印用户名为三个字符
awk 'BEGIN{a=0}{/sh$/ && a++}END{print a}' /etc/passwd 统计可登陆用户数量
awk -f test.awk /etc/passwd
 执行awk脚本

9、判断循环

  • 语法:awk 'if(条件表达式){动作}else{动作}' file
  • 多分支判断:awk ''{if(条件表达式){动作}else if(条件表达式){动作}else{动作}} file
  • while循环:while(条件){动作;变量更新}
  • for循环:for(变量初值;判断条件;变量的更新)
  • 循环控制语句:continue break exit next--跳过本行

10、数组

awk数组为关联数组 即可以使用字符串作下标

awk '{ip[$1]++}END{for(i in ip){print ip[i],i}}' passwd |sort -nr|head -5

11、示例

命令 说明
awk '{if(/adm/){print $0"\n"}else{print $0}}' passwd 在含adm行下打印空行
awk '{a=0;for(i=1;i<=$NF;i++){if(a<$i)(a=$i)}{print a}}' wenjain 每行取最大值 
awk 'BEGIN{n=1;max=0}{for(n=1;n<=NF;n++){i[$n]=$n;if(i[$n]>=max)max=i[$n]}{print max}{max=0}}' wenjain
 awk 'BEGIN{max = 0}{if($1 > max) max = $1}END{print max}' a.txt 每列最大值
awk '{sum += $1}END{print sum/NR}' a.txt 每列平均值
   
awk 'BEGIN{RS=":"}FNR<=7{print }' passwd 第一行字段纵向打印 
awk -F: 'NR==1{for(i=1;i<=NF;i++){print $i}}' passwd
   
awk 'BEGIN{for(i=1;i<10;i++) {for(j=1;j<=i;j++) {printf "%d%s%d%s%d\t",j,"",i,"=",ij;}printf "\n"}}'  九九乘法表
awk 'BEGIN{for(n=0;n++<9;){for(i=0;i++<n;)printf i"x"n"="i*n " \t";print" "}}'
   
awk 'BEGIN{FS=":"}{for(i=NF;i>=1;i--){if(i!=1){printf $i":"}else{printf $i}}printf "\n"}' passwd 倒序输出文件的每一列
   
awk 'NR==FNR{a[$1]}NR!=FNR{if(!($1 in a))print $0}' b.txt a.txt 打印a文件中有而b文件中没有的内容  
awk '{if(NR==FNR){a[$1]=1}else{if(a[$1]!=1){print $1}}}' b.txt a.txt
awk '{if(NR==FNR){a[$1]=1}else{delete a[$1]}}END{for(i in a){print i}}' a.txt b.txt

awk 文本编辑器的更多相关文章

  1. LINUX文件内容处理及文本编辑器vim

    Linux基本操作命令 echo命令 echo命令: 把echo后面的内容显示到屏幕. -n 显示内容的时候不显示每行结尾的回车 echo 内容 >> 文件名 表示把内容加到一个文件的末尾 ...

  2. 富文本编辑器Simditor的简易使用

    最近打算自己做一个博客系统,并不打算使用帝国cms或者wordpress之类的做后台管理!自己处于学习阶段也就想把从前台到后台一起谢了.好了,废话不多说了,先来看看富文本编辑器SimDitor,这里是 ...

  3. 个人网站对xss跨站脚本攻击(重点是富文本编辑器情况)和sql注入攻击的防范

    昨天本博客受到了xss跨站脚本注入攻击,3分钟攻陷--其实攻击者进攻的手法很简单,没啥技术含量.只能感叹自己之前竟然完全没防范. 这是数据库里留下的一些记录.最后那人弄了一个无限循环弹出框的脚本,估计 ...

  4. 关于SMARTFORMS文本编辑器出错

    最近在做ISH的一个打印功能,SMARTFORM的需求本身很简单,但做起来则一波三折. 使用环境是这样的:Windows 7 64bit + SAP GUI 740 Patch 5 + MS Offi ...

  5. 基于trie树的具有联想功能的文本编辑器

    之前的软件设计与开发实践课程中,自己构思的大作业题目.做的具有核心功能,但是还欠缺边边角角的小功能和持久化数据结构,先放出来,有机会一点点改.github:https://github.com/chu ...

  6. UEditor百度富文本编辑器--让编辑器自适应宽度的解决方案

    UEditor百度富文本编辑器的initialFrameWidth属性,默认值是1000. 不能够自适应屏幕宽度.如图1: 刚开始的时候,我是直接设置initialFrameWidth=null的.效 ...

  7. [bzoj1269][AHOI2006文本编辑器editor] (splay模版题 or pb_ds [rope]大法)

    Description 这些日子,可可不和卡卡一起玩了,原来可可正废寝忘食的想做一个简单而高效的文本编辑器.你能帮助他吗?为了明确任务目标,可可对“文本编辑器”做了一个抽象的定义:   文本:由0个或 ...

  8. Bzoj1269 [AHOI2006]文本编辑器editor

    Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3678  Solved: 1380 Description 这些日子,可可不和卡卡一起玩了,原来可可正 ...

  9. PHP Ueditor 富文本编辑器

    2016年12月11日 08:46:59 星期日 百度的简版富文本编辑器umeditor很久没更新了 全功能版本的配置项跟umeditor还是有区别的, 这里说下ueditor怎么对接到项目中去, 主 ...

  10. js中的文本编辑器控件KindEditor---那些打酱油的日子

    使用文本编辑器控件KindEditor渲染文本域页面显示 this.sync()同步KindEditor的值到textarea文本框 editor.isEmpty()判断文本域是否是空 editer. ...

随机推荐

  1. 为React Ant-Design Table增加字段设置

    最近做的几个项目经常遇到这样的需求,要在表格上增加一个自定义表格字段设置的功能.就是用户可以自己控制那些列需要展示. 在几个项目里都实现了一遍,每个项目的需求又都有点儿不一样,迭代了很多版,所以抽时间 ...

  2. ZYNQ国产化替代-FMQL100TAI 核心板

     概述 FMQL100TAI 核心板基于复旦微的PSOC 架构处理器,型号为FMQL100TAI9000, 板卡 100%采用国产芯片设计,板卡质量等级分为国产 I 级和国产 J 级.具备强大的运算能 ...

  3. Cannot resolve symbol ‘c:forEach‘;Cannot resolve taglib with uri http://java.sun.com/jsp/jstl/corede

    #### Cannot resolve taglib with uri http://java.sun.com/jsp/jstl/core:等类似,都是因为 在jsp页面中加入<%@ tagli ...

  4. 构建满足流批数据质量监控用火山引擎DataLeap

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 面对今日头条.抖音等不同产品线的复杂数据质量场景,火山引擎 DataLeap 数据质量平台如何满足多样的需求?本文 ...

  5. 两道题浅析PHP反序列化逃逸

    两道题浅析PHP反序列化逃逸 一.介绍 反序列化逃逸的出现是因为php反序列化函数在进行反序列化操作时,并不会审核字符串中的内容,所以我们可以操纵属性值,使得反序列化提前结束. 反序列化逃逸题一般都是 ...

  6. 【漏洞分析】Reflection Token 反射型代币攻击事件通用分析思路

    在本篇文章中,我将通过一个攻击事件引出 Reflection Token 攻击事件的一个通用分析思路. 关于 Reflection Token 的其他案例分析,可以参考BEVO代币攻击事件分析及复现一 ...

  7. [CF1416F] Showing Off

    题目链接 如果把方向看做有向边,整个图是一个内向基环树. 所以考虑哪些点有可能放在基环树的非环部分上,当且仅当一个点周围有严格小于他的点. 由于图一定是二分图(黑白染色),没有奇环,所有偶环一定可以拆 ...

  8. Pytorch实现YOLOv3训练自己的数据集

    1.说明: 最近一直在研究深度学习框架PyTorch,就想使用pytorch去实现YOLOv3的object detection.在这个过程中也在各大论坛.贴吧.CSDN等中看了前辈们写的文章,在这里 ...

  9. selenium之三种等待,强制等待、隐式等待和显式等待

    显式等待 presence_of_element_locatedpresence_of_all_elements_locatedvisibility_of_any_elements_located   ...

  10. 如何在IIS上部署docsify以及404问题

    操作步骤 创建一个文件夹,在文件夹中新建2个文件 index.html:入口文件,整个网站只需要这个html文件,其他文件都是md文件 README.md:主页内容,如果没有这个文件,访问时提示404 ...