Linux awk编辑器及命令

  • 一、awk编辑器
    • 1.工作原理
    • 2.命令格式
    • 3.awk常见的内建变量如下所示:
  • 二、按行输出文本
  • 三、按字段输出文本
  • 四、通过管道、双引号调用 Shell 命令

一、awk编辑器

1.工作原理

  • 逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。
  • sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个“字段”然后再进行处理。awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。在使用awk命令的过程中,可以使用逻辑操作符“&&”表示“与”、“||”表示“或”、“!”表示“非”;还可以进行简单的数学运算,如+、-、*、/、%、^分别表示加、减、乘、除、取余和乘方。

2.命令格式

awk 选项 '模式或条件 {操作}' 文件 1 文件 2 …
awk -f 脚本文件 文件 1 文件 2 …

3.awk常见的内建变量如下所示:

FS:列分割符。指定每行文本的字段分隔符,默认为空格或制表位。与"-F"作用相同
NF:当前处理的行的字段个数。
NR:当前处理的行的行号(序数)。
$0:当前处理的行的整行内容。
$n:当前处理行的第n个字段(第n列)。
FILENAME:被处理的文件名。
RS:行分隔符。awk从文件上读取资料时,将根据RS的定义把资料切割成许多条记录,而awk一次仅读入一条记录,以进行处理。预设值是’\n’

二、按行输出文本

awk '{print}' 1.txt                #输出所有内容
awk '{print $0}' 1.txt            #输出所有内容

awk 'NR==1,NR==3{print}' 1.txt #输出第 1~3 行内容
awk '(NR>=1)&&(NR<=3){print}' 1.txt   #输出第 1~3 行内容

awk 'NR==1||NR==3{print}' 1.txt        #输出第1行、第3行内容

awk '(NR%2)==1{print}' 1.txt         #输出所有奇数行的内容
awk '(NR%2)==0{print}' 1.txt        #输出所有偶数行的内容

awk '/^root/{print}' /etc/passwd       #输出以 root 开头的行

awk '/nologin$/{print}' /etc/passwd        #输出以 nologin 结尾的行

awk 'BEGIN {x=0};/\/bin\/bash$/{x++};END {print x}' /etc/passwd
#统计以/bin/bash 结尾的行数,等同于 grep -c "/bin/bash$"   /etc/passwd

BEGIN模式表示,在处理指定的文本之前,需要先执行BEGIN模式中指定的动作;awk再处理指定的文本,之后再执行END模式中指定的动作,END{}语句块中,往往会放入打印结果等语句

三、按字段输出文本

awk -F ":" '{print $3}' /etc/passwd      #输出每行中(以":"分隔)的第3个字段

awk -F ":" '{print $1,$3}' /etc/passwd       #输出每行中的第1、3个字段

awk -F ":" '$3<5{print $1,$3}' /etc/passwd    #输出第3个字段的值小于5的第1、3个字段内容

awk -F ":" '!($3<200){print}' /etc/passwd     #输出第3个字段的值不小于200的行

awk 'BEGIN {FS=":"};{if($3>=200){print}}' /etc/passwd
#先处理完BEGIN的内容,再打印文本里面的内容

awk -F ":" '{max=($3>$4)?$3:$4;{print max}}' /etc/passwd
#($3>$4)?$3:$4三元运算符,如果第3个字段的值大于第4个字段的值,则把第3个字段的值赋给max,否则第4个字段的值赋给max

awk -F ":" '{print NR,$0}' /etc/passwd       #输出每行内容和行号,每处理完一条记录,NR值加1

awk -F ":" '$7~"/bash"{print $1}' /etc/passwd  #输出以冒号分隔且第7个字段中包含/bash的行的第1个字段

awk -F ":" '($1~"root")&&(NF==7){print $1,$2}' /etc/passwd
#输出第1个字段中包含root且有7个字段的行的第1、2个字段

awk -F ":" '($7!="/bin/bash")&&($7!="/sbin/nologin"){print}' /etc/passwd
#输出第7个字段既不为/bin/bash,也不为/sbin/nologin的所有行

四、通过管道、双引号调用 Shell 命令

echo $PATH | awk 'BEGIN{RS=":"};END{print NR}'
#统计以冒号分隔的文本段落数,END{}语句块中,往往会放入打印结果等语句

awk -F: '/bash$/{print | "wc -l"}' /etc/passwd
#调用 wc -l 命令统计使用 bash 的用户个数,等同于 grep -c "bash$" /etc/passwd

free -m | awk '/Mem:/ {print int($3/($3+$4)*100)}'    #查看当前内存使用百分比

top -b -n 1 | grep Cpu | awk -F ',' '{print $4}' | awk '{print $1}'
#查看当前CPU空闲率,(-b -n 1 表示只需要1次的输出结果)

date -d "$(awk -F "." '{print $1}' /proc/uptime) second ago" +"%F %H:%M:%S"
#显示上次系统重启时间,等同于uptime;second ago为显示多少秒前的时间,+"%F %H:%M:%S"等同于+"%Y-%m-%d %H:%M:%S"的时间格式

awk 'BEGIN {while ("w" | getline) n++ ; {print n-2}"%"}'
#调用w命令,并用来统计在线用户数

awk 'BEGIN {"hostname" | getline ; {print $0}}'
#调用 hostname,并输出当前的主机名

当getline左右无重定向符“<”或“|”时,getline作用于当前文件,读入当前文件的第一行给其后跟的变量var或$0;应该注意到,由于awk在处理getline之前已经读入了一行,所以getline得到的返回结果是隔行的。
当getline左右有重定向符“<”或“|”时,getline则作用于定向输入文件,由于该文件是刚打开,并没有被awk读入一行,只是getline读入,那么getline返回的是该文件的第一行,而不是隔行。

seq 10 | awk '{print $0; getline}'   输出奇数行
seq 10 | awk '{getline; print $0}'   输出偶数行

Linux awk编辑器及命令相关推荐

  1. Linux vi 编辑器常见命令的使用

    Linux vi 编辑器常见命令的使用 Linux下的文本编辑器有很多种,vi 是最常用的,也是各版本Linux的标配.注意,vi 仅仅是一个文本编辑器,可以给字符着色,可以自动补全,但是不像 Win ...

  2. Linux vim编辑器常用命令

    在Linux下一般使用vi编辑器来编辑文件.vi既可以查看文件也可以编辑文件.三种模式:命令行.插入.底行模式. 切换到命令行模式:按Esc键: 切换到插入模式:按 i .o.a键:i 在当前位置前插 ...

  3. Linux vi编辑器常见命令的使用

    http://c.biancheng.net/cpp/html/2735.html 工作模式 进一步了解 vi 之前先来了解一下 vi 的工作模式,vi 有三种工作模式: 1) 普通模式 由Shell ...

  4. Linux——vim编辑器常用命令

    vim编辑器 #用vim编辑器打开文件 $ vim filename.xxx vim两种操作模式:普通模式,插入模式,用以上命令打开文件默认进入普通模式 普通模式 #普通模式命令 h #光标左移 j ...

  5. linux文本编辑器由命令模式进入编辑模式操作

    打开一个文件后,如果当前是命令模式,可以按下[i,I,o,O,a,A,r,R]等字母之后进入编辑模式,按下上述的字母时,画面的左下方可能会出现[--INSERT--或--插入--]的字样,可以做文字数 ...

  6. linux awk命令详解,使用system来内嵌系统命令,批量github,批量批下载视频, awk合并两列...

    linux awk命令详解 简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分 ...

  7. linux中sed命令用例,Linux中使用sed命令或awk命令修改常规配置文件

    一.方案: Linux中使用sed命令或awk命令修改常规配置文件 二.步骤: 1.假设有一个a.txt,内容如下: #!/bin/bash aa= bbb= ccc= #ddd= 2.如果想要把里面 ...

  8. linux awk菜鸟教程,Linux awk 命令

    Linux awk 命令 AWK是一种处理文本文件的语言,是一个强大的文本分析工具. 之所以叫AWK是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian K ...

  9. linux awk 脚本格式,偷偷学习shell脚本之awk编辑器

    目录 awk编辑器 一.工作原理 二.命令格式 三.使用awk编辑器(示例) 1.按行输出文本 2.按字段输出文本 3.通过管道.双引号调用 Shell 命令 awk编辑器 一.工作原理 sed命令常 ...

最新文章

  1. JVM - 实现自定义的ClassLoader就是这么简单
  2. sshd修改端口后几次启动失败
  3. OpenGL Multi Texture多重纹理的实例
  4. dockerfile源码安装mysql_docker容器详解五: dockerfile实现tomcat环境以及源码安装mysql...
  5. dubbo调用超时回滚_面试必问之Dubbo面试题
  6. springboot banner在线生成_用了自定义Banner后,SpringBoot瞬间变的高大上了...
  7. maven课程 项目管理利器-maven 2-2第一个maven案例hellomaven
  8. flex4 SuperTabNavigator 添加关闭图片
  9. linux 中文乱码 解决方法
  10. linux安装ps2键盘驱动程序,VoodooPS2Controller v1.8.25 黑苹果键盘鼠标触摸板万能驱动 _ 黑苹果乐园...
  11. 分而治之——最大子列和
  12. 007 定位明文封包call
  13. 知识资源整理(持续更新)
  14. 转载:性格与健康(刘善人)之二
  15. 运载火箭飞行控制系统设计
  16. Heritrix 拓展Heritrix
  17. 天猫超级品牌日:新零售营销应该这么玩
  18. python情绪分析的意义_如何用Python和R对故事情节做情绪分析?
  19. 今天你充电了没?Flutter、智能化、小程序等硬核技术等你来~~
  20. DSP28335 epwm使用

热门文章

  1. 神奇的 Go init 函数
  2. STL中算法锦集(三)
  3. LiveVideoStackCon深圳-编解码的三足鼎立
  4. 征稿:2018-2019音视频技术回顾与展望
  5. 音视频技术开发周刊 61期
  6. 迁移上云方法论-6R
  7. Linux系统中df与du命令查看分区大小
  8. 智能问答在金融领域中的实践与应用
  9. 腾讯AI Lab的研究方向
  10. c# async/await编程