shell编程系列14--文本处理三剑客之awk的概述及常用方法总结
- shell编程系列14--文本处理三剑客之awk的概述及常用方法总结
- awk是一个文本处理工具,通常用于处理数据并生成结果报告
- awk的命名是它的创始人 Alfred Aho、Peter Weinberger和Brian Kernighan 姓氏的首个字母组成的
- awk的工作模式
- 语法格式
- 第一种形式: awk 'BEGIN{}pattern{commands}END{}' file_name
- BEGIN在匹配之前就执行的操作,pattern{commands}是对每一行的操作,END是匹配完后的操作
- 第二种形式: standard output | awk 'BEGIN{}pattern{commands}END{}'
- 语法格式说明
- 语法格式 说明
- BEGIN{} 正式处理数据之前执行
- pattern 匹配模式
- {commands} 处理命令,可能多行
- END{} 处理完所有匹配数据后执行
- awk的内置变量
- 内置变量对照表(上)
- 内置变量 含义
- $ 整行内容
- $-$n 当前行的第1-n个字段
- NF 当前行的字段个数,也就是多少列
- NR 当前的行号,从1开始计数
- FNR 多文件处理时,每个文件行号单独计数,都是从0开始
- FS 输入字段分隔符。不指定默认以空格或tab键分割
- RS 输入行分隔符。默认回车换行
- OFS 输出字段分隔符。默认为空格
- ORS 输出行分隔符。默认为回车换行
- 内置变量对照表(下)
- 内置变量 含义
- FILENAME 当前输入的文件名字
- ARGC 命令行参数个数
- ARGV 命令行参数数组
- 总结:
- 内置变量:
- $ 打印行所有信息
- $~$n 打印行的第1到n个字段信息
- NF Number Field 处理行的字段个数
- NR Number Row 处理行的行号
- FNR File Number Row 多文件处理时,每个文件单独记录行号
- FS Field Separator 字段分隔符,不指定时默认以空格或tab键分割
- RS Row Separator 行分隔符,不指定时以回车换行分割
- OFS Output Filed Separator 输出字段分隔符
- ORS Output Row Separator 输出行分隔符
- FILENAME 处理文件的文件名
- ARGC 命令行参数个数
- ARGV 命令行参数数组
- # 输出整行数据
- [root@localhost shell]# awk '{print $0}' passwd
- root:x:::root:/root:/bin/bash
- bin:x:::bin:/bin:/sbin/nologin
- daemon:x:::daemon:/sbin:/sbin/nologin
- adm:x:::adm:/var/adm:/sbin/nologin
- lp:x:::lp:/var/spool/lpd:/sbin/nologin
- sync:x:::sync:/sbin:/bin/sync
- shutdown:x:::shutdown:/sbin:/sbin/shutdown
- halt:x:::halt:/sbin:/sbin/halt
- mail:x:::mail:/var/spool/mail:/sbin/nologin
- operator:x:::operator:/root:/sbin/nologin
- games:x:::games:/usr/games:/sbin/nologin
- ftp:x:::FTP User:/var/ftp:/sbin/nologin
- nobody:x:::Nobody:/:/sbin/nologin
- systemd-network:x:::systemd Network Management:/:/sbin/nologin
- dbus:x:::System message bus:/:/sbin/nologin
- polkitd:x:::User for polkitd:/:/sbin/nologin
- sshd:x:::Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
- postfix:x::::/var/spool/postfix:/sbin/nologin
- ajie:x:::ajie:/home/ajie:/bin/bash
- chrony:x::::/var/lib/chrony:/sbin/nologin
- deploy:x::::/home/deploy:/bin/bash
- nginx:x:::Nginx web server:/var/lib/nginx:/sbin/nologin
- # FS指定分隔符
- [root@localhost shell]# awk 'BEGIN{FS=":"}{print $1}' passwd
- root
- bin
- daemon
- adm
- lp
- sync
- shutdown
- halt
- operator
- games
- ftp
- nobody
- systemd-network
- dbus
- polkitd
- sshd
- postfix
- ajie
- chrony
- deploy
- nginx
- # 默认以空格或者tab为分隔符
- [root@localhost shell]# cat list
- Hadoop Spark Flume
- Java Python Scala
- Allen Mike Meggie
- [root@localhost shell]# awk '{print $1}' list
- Hadoop
- Java
- Allen
- [root@localhost shell]# awk 'BEGIN{FS=" "}{print $1}' list
- Hadoop
- Java
- Allen
- # NF 输出每一行的字段个数
- [root@localhost shell]# cat list
- Hadoop Spark Flume
- Java Python Scala Golang
- Allen Mike Meggie
- [root@localhost shell]# awk '{print NF}' list
- # NR 行号,处理多个文件(list,passwd,/etc/fstab)时行号累加
- [root@localhost shell]# awk '{print NR}' list passwd /etc/fstab
- # FNR在处理两个文件以上时会单独计数
- [root@localhost shell]# awk '{print FNR}' list passwd /etc/fstab
- [root@localhost shell]# cat list
- Hadoop|Spark:Flume
- Java|Python:Scala:Golang
- Allen|Mike:Meggie
- # 以 | 符号分隔列
- [root@localhost shell]# awk 'BEGIN{FS="|"}{print $2}' list
- Spark:Flume
- Python:Scala:Golang
- Mike:Meggie
- # 以 : 符号分隔列
- [root@localhost shell]# awk 'BEGIN{FS=":"}{print $2}' list
- Flume
- Scala
- Meggie
- # RS 指定行分隔符: --
- [root@localhost shell]# cat list
- Hadoop|Spark|Flume--Java|Python|Scala|Golang--Allen|Mike|Meggie
- [root@localhost shell]# awk 'BEGIN{RS="--"}{print $0}' list
- Hadoop|Spark|Flume
- Java|Python|Scala|Golang
- Allen|Mike|Meggie
- [root@localhost shell]# awk 'BEGIN{RS="--";FS="|"}{print $3}' list
- Flume
- Scala
- Meggie
- # ORS输出分隔符,以&连接各输出行
- [root@localhost shell]# awk 'BEGIN{RS="--";FS="|";ORS="&"}{print $3}' list
- Flume&Scala&Meggie
- # 字段默认分隔符是空格
- [root@localhost shell]# awk 'BEGIN{RS="--";FS="|";ORS="&"}{print $1,$3}' list
- Hadoop Flume&Java Scala&Allen Meggie
- &
- # OFS 指定字段分隔符为 :
- [root@localhost shell]# awk 'BEGIN{RS="--";FS="|";ORS="&";OFS=":"}{print $1,$3}' list
- Hadoop:Flume&Java:Scala&Allen:Meggie
- &
- # FILENAME 文件名
- [root@localhost shell]# awk '{print FILENAME}' list
- list
- # 输出3次文件名list,是因为没有输入匹配模式 awk默认是行处理,文本有3行,处理三次会有3次输出
- [root@localhost shell]# cat list
- Hadoop|Spark|Flume--Java|Python|Scala|Golang--Allen|Mike|Meggie
- Test File
- Line
- [root@localhost shell]# awk '{print FILENAME}' list
- list
- list
- list
- # ARGC命令行参数个数
- [root@localhost shell]# awk '{print ARGC}' list
- [root@localhost shell]# awk '{print ARGC}' list /etc/fstab
- # NF表示字段个数,NF= $NF 就是$ 表示最后一个字段
- [root@localhost shell]# awk 'BEGIN{FS=":"}{print $NF}' /etc/passwd
- /bin/bash
- /sbin/nologin
- /sbin/nologin
- /sbin/nologin
- /sbin/nologin
- /bin/sync
- /sbin/shutdown
- /sbin/halt
- /sbin/nologin
- /sbin/nologin
- /sbin/nologin
- /sbin/nologin
- /sbin/nologin
- /sbin/nologin
- /sbin/nologin
- /sbin/nologin
- /sbin/nologin
- /sbin/nologin
- /bin/bash
- /sbin/nologin
- /bin/bash
- /sbin/nologin
shell编程系列14--文本处理三剑客之awk的概述及常用方法总结的更多相关文章
- shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计
shell编程系列21--文本处理三剑客之awk中数组的用法及模拟生产环境数据统计 shell中的数组的用法: shell数组中的下标是从0开始的 array=("Allen" & ...
- shell编程系列18--文本处理三剑客之awk动作中的条件及if/while/do while/for循环语句
shell编程系列18--文本处理三剑客之awk动作中的条件及if/while/do while/for循环语句条件语句 if(条件表达式) 动作1 else if(条件表达式) 动作2 else 动 ...
- shell编程系列20--文本处理三剑客之awk常用选项
shell编程系列20--文本处理三剑客之awk常用选项 awk选项总结 选项 解释 -v 参数传递 -f 指定脚本文件 -F 指定分隔符 -V 查看awk的版本号 [root@localhost s ...
- shell编程系列19--文本处理三剑客之awk中的字符串函数
shell编程系列19--文本处理三剑客之awk中的字符串函数 字符串函数对照表(上) 函数名 解释 函数返回值 length(str) 计算字符串长度 整数长度值 index(str1,str2) ...
- shell编程系列17--文本处理三剑客之awk动作中的表达式用法
shell编程系列17--文本处理三剑客之awk动作中的表达式用法 awk动作表达式中的算数运算符 awk动作中的表达式用法总结: 运算符 含义 + 加 - 减 * 乘 / 除 % 模 ^或** 乘方 ...
- shell编程系列16--文本处理三剑客之awk模式匹配的两种方法
shell编程系列16--文本处理三剑客之awk模式匹配的两种方法 awk的工作模式 第一种模式匹配:RegExp 第二种模式匹配:关系运算匹配 用法格式对照表 语法格式 含义 RegExp 按正则表 ...
- shell编程系列15--文本处理三剑客之awk格式化输出printf
shell编程系列15--文本处理三剑客之awk格式化输出printf printf的格式说明符 格式符 含义 %s 打印字符串 %d 打印十进制数 %f 打印一个浮点数 %x 打印十六进制数 %o ...
- shell编程系列11--文本处理三剑客之sed利用sed删除文本中的内容
shell编程系列11--文本处理三剑客之sed利用sed删除文本中的内容 删除命令对照表 命令 含义 1d 删除第一行内容 ,10d 删除1行到10行的内容 ,+5d 删除10行到16行的内容 /p ...
- shell编程系列12--文本处理三剑客之sed利用sed修改文件内容
shell编程系列12--文本处理三剑客之sed利用sed修改文件内容 修改命令对照表 编辑命令 1s/old/new/ 替换第1行内容old为new ,10s/old/new/ 替换第1行到10行的 ...
随机推荐
- Flask-session,WTForms,POOL,Websocket通讯原理 -握手,加密解密过程
1.Flask-session Flask中的session 需要执行 session_interface - open_session存储到redis中,存的key:session:d3f07db2 ...
- go cache
go 编译, 或是安装库的时候,产生的日志量很大 go env 删除掉这个log.txt文件,系统空间瞬间就够了
- 1210 BBS admin后台管理及侧边栏筛选个人站点
目录 昨日内容 django admin后台管理 使用 建表 用户图片的显示 MEDIA用户配置 查找照片 搭建个人站点 防盗链 新建css文件 侧边栏展示标签 定义分类栏与标签栏 定义时间栏 侧边栏 ...
- 《发际线总是和我作队》第九次作业:Beta冲刺Scrum Meeting3
项目 内容 这个作业属于哪个课程 软件工程 这个作业的要求在哪里 实验十三 团队作业9:Beta冲刺与团队项目冲刺 团队名称 发际线总和我作队 作业学习目标 (1)掌握软件黑盒测试技术:(2)掌握软件 ...
- DT二次开发之-采购页面加入好看的倒计时
加入采购页面倒计时,个人感觉挺漂亮的,做下笔记. <span id="timer" ></span> {if $totime} <script typ ...
- Redis 中的高级数据类型
5个基础数据类型 高级功能 ① HyperLogLog (参考) 供不精确的去重计数功能,比较适合用来做大规模数据的去重统计,例如统计 UV > PFADD visitors alice bob ...
- 使用VISIO绘制组织结构图的操作方法
1.确保电脑已安装VISIO软件,然后在电脑指定位置点击鼠标右键新建VISIO绘图文档. 2.打开文档,在弹出的选择绘图类型中点击商务.组织结构图,之后点击确定. 3.之后进入绘图主界面,在左侧是形状 ...
- K Edit Distance
Description Given a set of strings which just has lower case letters and a target string, output all ...
- 016_Python3 函数
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以自己创建函数,这 ...
- CSS3新增选择器:伪元素选择器
一. ::first-letter 第一个字 二. ::first-line 第一行(以浏览器为准的第一行) 三. ::selection 被选中的字行(鼠标选中的字段)只能向 ::selectio ...