Linux:文本三剑客之awk

这篇具有很好参考价值的文章主要介绍了Linux:文本三剑客之awk。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、awk编辑器

1.1 awk概述

  • awk:是一种处理文本文件的语言,是一个强大的文本分析工具

1.2 awk工作原理

  • awk:逐行读取文本,默认以空格tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。

1.3 awk与sed的区别

  • 1、sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个“字段”然后再进行处理
  • 2、awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示
  • 3、在使用awk命令的过程中,可以使用逻辑操作符“&&”表示“与”、“||”表示“或”,“!”表示“非”
  • 4、awk还可以进行简单的数学运算,如"+、、-、*、/、%、^"分别表示加、减、乘、除、取余和乘方

二、awk的应用

2.1 命令格式

awk 选项 ‘模式或条件 {操作}’ 文件1 文件2...
awk -f 脚本文件 文件1 文件2...

2.2 awk常见的内建变量(可直接用)

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

三、awk使用

3.1 按行输出文本

awk '{print}' testfile2 				#输出所有内容
awk '{print $0}' testfile2 				#输出所有内容
awk 'NR==1,NR==3{print}' testfile2		#输出第 1~3 行内容
awk '(NR>=1)&&(NR<=3){print}' testfile2	#输出第 1~3 行内容
awk 'NR==1||NR==3{print}' testfile2		#输出第1行、第3行内容
awk '(NR%2)==1{print}' testfile2 		#输出所有奇数行的内容
awk '(NR%2)==0{print}' testfile2		#输出所有偶数行的内容
awk '/^root/{print}' /etc/passwd		#输出以 root 开头的行
awk '/nologin$/{print}' /etc/passwd		#输出以 nologin 结尾的行

Linux:文本三剑客之awk
Linux:文本三剑客之awk
Linux:文本三剑客之awk
Linux:文本三剑客之awk
Linux:文本三剑客之awk

awk '(NR%2)==1 {print NR}' testfile1
awk '(NR%2)==1 {print NR $0}' testfile1
awk '(NR%2)==1 {print NR','$0}' testfile1
awk '(NR%2)==1 {print NR","$0}' testfile1 #只有用双引号才能指定间隔符号,否则默认使用空格符号,上面的单引号加不加没区别

Linux:文本三剑客之awk

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{}语句块中,往往会放入打印结果等语句
Linux:文本三剑客之awk

3.2 按字段输出文本

awk -F: '/^root/ {print $2}' /etc/passwd    #输出root开头的第二个字段
awk -F: '/^root/ {print $2,$4}' /etc/passwd #输出root开头的第二、四字段
awk -F: '/^root/ {print $0}' /etc/passwd    #输出root开头的行
awk -F: '/^root/ {print $NF}' /etc/passwd   #输出root开头的最后一个字段

Linux:文本三剑客之awk

awk -F ":" '!($3<200){print}' /etc/passwd 	               #输出第3个字段的值不小于200的行
awk 'BEGIN {FS=":"};{if($3>=1000){print}}' /etc/passwd	   #以冒号间隔,打印第三个字段的值大于等于1000的行
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		               #输出每个行号,最后统计总行数
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的所有行

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

echo $PATH | awk 'BEGIN{RS=":"};END{print NR}'		#统计以冒号分隔的文本段落数,打印行号
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"的时间格式。/proc/uptime 第一列输出的是:系统启动到现在的时间(以秒为单位);第二列输出的是:系统空闲的时间(以秒为单位)
date -d "$(date -d"1 month" +"%Y%m01") -3 day" +"%Y%m%d"  #当月倒数第三天
date +"%Y%m01"        #当月第一天
awk 'BEGIN {n=0 ; while ("w" | getline) n++ ; {print n-2}}'	#调用w命令,并用来统计在线用户数
awk 'BEGIN {"hostname" | getline ; {print $0}}'			#调用 hostname,并输出当前的主机名
seq 10 | awk '{getline; print $0}'      #获取偶数行
seq 10 | awk '{print $0; getline}'      #获取基数行

Linux:文本三剑客之awk
当getline左右无重定向符“<”或“|”时,awk首先读取到了第一行,就是1,然后getline,就到了1下面的第二行,就是2,因为getline之后,awk会改变对应的NF,NR,FNR和$0等内部变量,所以此时的$0的值就不再是1,而是2了,然后将它打印出来。 当getline左右有重定向符“<”或“|”时,getline则作用于定向输入文件,由于该文件是刚打开,并没有被awk读入一行,只是getline读入,那么getline返回的是该文件的第一行,而不是隔行。 FNR:awk当前读取的记录数,其变量值小于等于NR(比如当读取第二个文件时,FNR是从0开始重新计数,而NR不会)。 NR==FNR:用于在读取两个或两个以上的文件时,判断是不是在读取第一个文件文章来源地址https://www.toymoban.com/news/detail-454662.html

awk -F: '$1 ~ /root/ && $NF ~ /\/bin\/bash/ {print}' /etc/passwd #输出/etc/passwd/文件中首字段包含 root 且最后一个字段包含/bin/bash/的行,取反则在“~”加上“!”

到了这里,关于Linux:文本三剑客之awk的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux:文本三剑客之awk

    awk:是一种 处理文本文件的语言 ,是一个强大的 文本分析工具 。 awk: 逐行读取文本 ,默认以 空格 或 tab键 为分隔符 进行分隔 ,将分隔所得的 各个字段 保存到 内建变量 中,并按模式或者条件执行编辑命令。 1、sed命令常用于一整行的处理,而awk比较 倾向于将一行分成

    2024年02月05日
    浏览(56)
  • 快速上手Linux核心命令(五):文本处理三剑客

    目录 前言 正则表达式 第一剑客 grep 第二剑客 sed 第三 剑客 awk 小结 上一篇中已经预告,我们这篇主要说Linux文本处理 三剑客 。他们分别是 grep 、 sed 、 awk 。既然能被业界称为三剑客,可见其在Linux命令中占有举足轻重得地位。所以呢,这里也专门写一篇文章说一说其用法。

    2023年04月25日
    浏览(62)
  • linux文本三剑客---grep,sed,awk

    目录 grep 什么是grep? grep实例演示 命令参数: 案例演示: sed 概念:  常用选项: 案例演示: awk 概念: awk常用命令选项: awk变量: 内置变量 自定义变量 awk的简单案例 在“a b c d”的d后面插入三个字符 统计tcp连接状态数量  统计日志中状态码非200的IP的次数 什么是grep?

    2024年02月13日
    浏览(58)
  • Linux文本三剑客---grep、sed、awk

    awk、grep、sed是linux操作文本的三大利器,三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂。grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较复杂格式处理。 1、grep 1.1 命令格式 1.2命令功能

    2024年02月14日
    浏览(54)
  • Linux文本三剑客(grep、sed、awk)

    目录 grep 1、什么是grep和rgrep? 2、使用grep 2.1、命令格式 2.2、命令功能 2.3、命令参数 3、实战演示 sed 1、认识sed 2、使用sed 2.1、命令格式 2.2、常用选项options 2.3、地址定界 2.4、编辑命令command 3、sed用法演示 3.1、常用选项用法演示 3.2、sed地址定界演示 3.3、编辑命令command演示

    2024年02月03日
    浏览(52)
  • Linux 文本处理三剑客:grep、sed 和 awk

    awk、grep、sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一。三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂。grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较

    2024年01月17日
    浏览(61)
  • Linux:管道命令与文本处理三剑客(grep、sed、awk)

    众所周知,bash命令执行的时候会输出信息,但有时这些信息必须要经过几次处理之后才能得到我们想要的格式,此时应该如何处置?这就牵涉到 管道命令(pipe) 了。管道命令使用的是 | 这个界定符号。另外,管道命令与连续执行命令是不一样的,这点下面我们会说明。 我们先

    2023年04月18日
    浏览(54)
  • 文本三剑客之 awk

    Linux/UNIX 系统中,awk 是一个功能强大的编辑工具。逐行读取输入文本 以空格作为分割符,多个空格他会自动压缩成一个空格 AWK信息的读入也是逐行指定的匹配模式进行查找,对符合条件的内容进行格式化输出或者过滤处理. 1按照命令找指定的行  2.找到的行 打印,操作 awk

    2024年02月08日
    浏览(42)
  • 文本三剑客之~~~sed命令

    sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。 sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令文本文件中。 包括读取,执行和显示三个过程 读取:sed从输入流(文件,管道

    2024年02月05日
    浏览(41)
  • 文本三剑客&正则表达式2

    主要是对文件内容按照行的方式进行增删改查 工作流程 sed的工作流程主要包括** 读取、执行和显示 **三个过程 读取 sed从 输入流 (文件、管道、标准输入) 中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space ) 执行 默认情况下,所有的sed命令都在模式空间中

    2024年02月05日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包