awk命令
awk命令
1 awk命令
1.1 awk作用
擅长取列,擅长统计分析 实际上是gawk的软链接。模式扫描(条件分配),程序语言
1.2 语法
awk [参数] '模式(条件) {动作}(指令)' 文件信息
1.3 功能
查询,排除,替换
以下命令所需环境: cat > oldboy.txt <<EOF
Zhang Dandan 41117397 :250: 100 :175
Zhang Xiaoyu 390320151 :155:90:201
Meng Feixue 80042789 :250:60:50
Wu Waiwai 70271111 :250:80:75
Liu Bingbing 41117483 :250: 100 :175
Wang Xiaoai 3515064655 :50:95:135
Zi Gege 1986787350 :250:168:200
Li Youjiu 918391635 :175:75:300
Lao Nanhai 918391635 :250: 100 :175
EOF
1、显示Xiaoyu的姓氏和ID号码
(1)awk '/Xiaoyu/{print $1,$3}' oldboy.txt
(2)awk '/Xiaoyu/{print $1" "$3}' oldboy.txt
要用逗号,或者双引号分隔
按照指定列进行搜索信息
(1)awk '$2~/Xiaoyu/' oldboy.txt 将有Xiaoyu的信息显示出来
(2)awk '$2!~/Xiaoyu/' oldboy.txt !:表示取反 排除Xiaoyu的信息,将其他信息取出来
~:代表在awk中列的匹配方式
2、姓氏是zhang的人,显示他的第二次捐款金额及他的名字
第一步:先找出姓氏是张的人
awk '$1~/Zhang/' oldboy.txt
第二步:显示出名字和所有捐款记录
awk '$1~/Zhang/{print$2,$4}' oldboy.txt
第三步:指定字符信息作为空格符
awk -F "[: ]+" '$1~/Zhang/{print$2,$5}' oldboy.txt
补充:awk默认使用空格进行作为列分隔符 默认区分大小写
-F 指定分隔符的符号信息
利用 -F "[: ]+" -F 指定括号里的冒号,空格作为分隔符 +:将多个连续的分隔符汇总为一个整体
3、显示所有以41开头的ID号码人的全名和ID号码
第一步:找出ID号码是41开头的人
awk '$3~/^41/' oldboy.txt
第二步:显示出人的全名和ID号码
awk '$3~/^41/{print$1,$2,$3}' oldboy.txt|column -t
columt -t :对文件内容信息进行排序
4、显示所有ID号码最后一位数字是1或5的人的全名
第一步:找出ID号码最后一位数字是1或5的信息
awk '$3~/[15]$/'oldboy.txt
awk '$3~/1$|5$/' oldboy.txt
[ ]、| :在这里都是或者的关系
第二步:显示出全名信息
awk '$3~/[15]$/{print$1,$2}' oldboy.txt|column -t
5、显示文件中第二行,第三行的信息
第一步:显示第二行
awk 'NR==2' oldboy.txt
第二步:显示第三列
awk 'NR==2{print $3}' oldboy.txt
NR:表示行号信息,取出第几行信息
NR==2:取出第二行信息
6、显示Xiaoyu的捐款,每个捐款数值都有以$开头,
方法一:awk -F "[:]" 'NR==2{print "$"$2"$"$3"$"$4}' oldboy.txt
方法二:awk '$2~/Xiaoyu/{print $4}' oldboy.txt|sed 's#:#$#g'
方法三:awk '$2~/Xiaoyu/{print $4}' oldboy.txt|tr ":" "$"
方法四:awk替换功能
gsub(/要替换的信息/,"替换成什么",将第几列进行替换)
awk '$2~/Xiaoyu/{gsub(/:/,"$",$NF);print $NF}' oldboy.txt
1.4 awk命令高级功能说明
普通模式:
1、正则表达式作为模式 ^:还可以表示某一列的开始 $:还可以表示某一列的开始
2、比较表达式作为模式
awk 'NR==1{print $NF}' oldboy.txt
3、范围模式:
awk 'NR==1;NR==2' oldboy.txt 只查看第一和第二行
awk 'NR==1,NR==3' oldboy.txt 查看第一到第三行
特殊模式:BEGIN :在处理文件之前先执行的动作
(1)生成文件内容表头信息
awk 'BEGIN{print "姓氏","名称","id号码","捐款记录"}{print $0}' oldboy.txt |column -t
(2)用于在系统中进行运算数值
awk 'BEGIN{print 2+3}'
(3)修改或设置变量信息
a:awk命令中,会直接将字符串信息当成变量
$1: 表示取第一列
$NF:表示取最后一列信息
$: 表示取一行中所有的列
①awk 'BEGIN{oldboy=62;print oldboy}'
将oldboy当成变量
②awk 'BEGIN{oldboy=62;print "oldboy"}'
加上" "取消oldboy的变量
b:awk命令中,变量分类:
自定义变量:oldboy=62
内置变量:
NF : 显示最后一列信息 $(NF-1) 取倒数第2列
NR : 表示行号信息0,取出第几行 NR==2 NR>=2 NR<=2
FS : 指定分隔符信息 -F
①awk -F ":" 'NR==1{print $2}' oldboy.txt
以 :作为分隔符,取第一行第二列
②awk 'BEGIN{FS=":"}NR==1{print $2}' oldboy.txt
③awk -vFS=":" 'NR==1{print $2}' oldboy.txt
END:在处理文件之后再执行的动作
awk 'END{print "总结:这是一个学生登记表"}{print $0}' oldboy.txt|column
1.5 awk统计运算
1、计算空格出现的次数:
awk '/^$/{i=i+1}END{print i}' /etc/services
2、统计/etc/passwd文件中最后一列有/sbin/nologin的出现了多少次
①awk -F ":" '$NF~/nologin$/{i++}END{print i}' /etc/passwd
②awk '/nologin$/{i++}END{print i}' /etc/passwd
i=i+1 = i++ 累加运算:计算文件中一个字符串出现的次数
3、求和运算
seq 10|awk '{i=i+$1}END{print i}'
补充
NF : 显示最后一列信息 $(NF-1) 取倒数第2列
NR : 表示行号信息0,取出第几行 NR==2 NR>=2 NR<=2
FS : 指定分隔符信息 -F
$1: 表示取第一列
$NF:表示取最后一列信息
$: 表示取一行中所有的列
-F : 指定分隔符号信息 ":" "[:/]" "[:/]+"
-v : 设置变量信息
1.6 利用awk取出ip地址
第一步:定位有ip地址的行
ip a s eth0|awk 'NR==3'
第二步:只显示ip地址
ip a s eth0|awk -F "[ /]+" 'NR==3{print $3}' 用-F指定参数的时候,开头的^和空格都属于列
ip a s eth0|awk -F "[^0-9.]+" 'NR==3{print $2}'
在不指定-F参数信息时,
1. 默认将多个连续的空格汇总为整体
2. 默认将一行头部开始空格信息忽略不计
用-F指定参数的时候,开头的^和空格都属于列
原文地址:https://www.cnblogs.com/basa/p/11136365.html
- 揭秘深度强化学习
- Swoole-2.0.1-Alpha 已发布,提供PHP原生协程支持
- Google核心技术之——PageRank算法scala实现
- 代码审查拯救世界?
- Kafka实战:从RDBMS到Hadoop,七步实现实时传输
- Apache NiFi 1.0.0测试版:邮件路由应用新型ListenSMTP
- 为什么我坚持使用 JavaScript 函数声明
- NewSQL数据库大对象块存储原理与应用
- 使用xUnit为.net core程序进行单元测试(下2)
- MongoDB + Spark: 完整的大数据解决方案
- 如何实现自然语言处理的集束搜索解码器
- PostgreSQL 使用advisory lock或skip locked消除行锁冲突, 提高几十倍并发更新效率
- 流动的数据——使用 RxJS 构造复杂单页应用的数据逻辑
- 内存泄漏的检测、解决、防止
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 使用docker安装elasticsearch伪分布式集群以及安装ik中文分词插件
- PyQt5 技巧篇-如何让窗体只显示关闭按钮
- Gradle多项目构建与jar包发布
- Gradle初体验
- hexo初始化
- 容器部署Spring Cloud项目
- Python 爬虫篇-爬取网页中的图片,图片爬取实例演示。
- Python 爬虫进阶篇-4行代码实现爬取指定网站中的全部图片,深入剖析
- Python+selenium 自动化-基本环境搭建
- Java多线程与并发笔记
- Python 技术篇-pygame库实现播放音乐,带漂亮小界面!
- Java底层:GC相关
- Python 技术篇-pygame界面添加图片不显示,原因及解决办法
- SpringBoot集成Graylog
- Python 技术篇-pygame播放音乐没有声音,原因及解决办法