Linux--shell的awk--10
一、awk介绍
全称:由Aho Weinberger Kernaighan三个人的首字母组合而成
1970年第一次出现在Unix机器上,后来在开源领域使用它
awk是一种单独的编程语言解释器
awk报告生成器:通过模式匹配以及自己本身的语言格式,来获取并输出客户所需要的内容
示例:获取系统上面用户id大于1小于等于500的用户的用户名和用户ID
awk -F: '{if($3>=1&&<=500){print $1,$3}}' /etc/passwd
二、awk工作原理
1、依次把匹配到的行,使用awk工具进行编辑
2、$0表示整行,$1代表第一个…,$NF代表最后一个
3、pattern;通过模式匹配对应的字段过滤行;
4、通过对应的命令 printf 做格式化输出
三、awk用法
awk [option] … 'program' FILE
注意:
1、program 必须使用单引号
2、多条program语句使用大括号包含起来,可以并列、嵌套
awk '{print}' /etc/passwd #默认打印$
四、awk常见选项(option)
-F 指定分隔符,默认是空格
-F[:\] 指定多个分隔符
例:
awk -F[:\] '{print $3,$5,$7}' /etc/passwd 指定 : 和 / 为分隔符
-v 手动指定变量参数
awk -v a="a/b" 'print a' a.txt
1、a是自定义变量
2、在awk中调用变量不用加$符号
cut与awk的区别
awk 以空格为分割域时,是以单个或多个连续的空格为分隔符的;
cut则是以单个空格作为分隔符。
五、awk的语法格式----program
1、print
默认输出(在屏幕上)
在awk中没有保存命令,我们可以关联其他命令(tee)来保存
2、printf 实现格式化输出
输出格式:printf "xxx %-10s xxx %-10d ",name,num
格式符:
%s 显示字符串
%d %i 显示数值
%c 显示ASCII
%e %E 科学计算方式
%f 显示浮点数
%u 无符号整数
%% 逃逸符,只显示%自己
修饰符:
默认为右对齐
- 代表左对齐
%5.4f 代表占位数为5,小数位有4位
3、变量
内置变量----环境变量(bash)
awk语言所默认支持的变量
FS 定义输入分隔符的变量
OFS 定义输出分隔符的变量
NF($NF) 分割以后的最后一列的变量,变量引用的时候不用加$
NR 定义文件的行数,定义多个文件的时候,行号叠加
FNR 定义文件行数时,只计算自己的行号
FILENAME 存储文件名字
BEGIN 只执行一次后面的命令
awk 'BEGIN{print "xxx"}{print$3}' /etc/passwd
ARGC 整个 命令参数 的段数 不包含ARGC命令本身
ARGV 用来调取命令中指定的段
awk '{print ARGC}' /etc/passwd ==
awk '{print ARGV[2]}' /etc/passwd == /etc/passwd
RS 指定换行符,默认为\n,可以指定新的换行符,不影响默认符号
ORS 输出时替换默认换行符
awk -v ORS="@" '{print}' /etc/passwd
自定义变量
-v 变量=值
在后面’program’中去调用自定义变量时,直接使用即可或者将”变量=值”语句写到program即可
4、模式匹配(地址定界)
a) 空值,没有定义,默认就将文件中所有行放入awk中进行循环
b) 对m~n行进行操作
awk 'NR>=1&&NR<=3{print}' /etc/passwd 打印1到3行
c) pattern匹配的行 /pattern/
awk '/r..t/{print}' /etc/passwd
d) /pattern1/,/pattern2/ 第一次pattern1到第一次匹配pattern2的行
awk '/root/,/user1/{print}' /etc/passwd
练习:判断/patern1/,/pattern2/之间行的用户是bash用户,并显示用户名
awk -F: '/^root/,/user1/{if($NF=="/bin/bash");print $1,$3}' /etc/passwd
e) 模式匹配可以直接使用判断语句
awk -F: '$NF=="/bin/bash"{print $1 $3}' /etc/passwd
f) BEGIN定义在默认循环进行操作前所要执行的语句
awk -F: 'BEGIN{printf "shell程序为bash:\n"}$NF=="/bin/bash"{print $1,$3}' /etc/passwd
g) END 定义在循环结束后执行
awk -F: $NF=="/bin/bash"{print $,$} 'END{printf "end\n"}' /etc/passwd
5、操作符
运算操作符
+ - * / % ^(乘方) //
比较运算符
> < == != >= <= ~(等于) !~
awk -F: '-FS~"/bin/bash" {print $1,$3}' /etc/passwd
逻辑操作符
&& || !
赋值操作符
= += -= /= *= %= ^= //=
条件表达式
条件语句? 条件成立语句;条件不成立语句
awk '/^title/{NF<=2? print; print "参数过少"}' /boot/grub/grub.conf
6、常见action
print printf 以及它任何命令的操作都是action
a) expressions
b) input statements输入语句
c) 组合语句 compound statements /pat1/{{ }{ }}
d) control statements 控制语句 例如 if while等
e) output statements 输出语句
7、常见语言
a) if语句
语法格式:if(条件表达式){执行语句} else {执行语句}
awk '/^title/{if(NF<=2){print} else {print "error"}}' /boot/grub/grub.conf
b) while语句
只有对行参数进行遍历的时候才使用while语句
语法格式:初始值 while(条件表达式){循环体;初始控制语句}
c) for语句
语法格式:for(初始值;条件判断;初始值控制语句){循环体}
d) do-while语句
语法格式:do {循环体} while (循环条件)
e) 跳出循环语句
break [n] 跳出n次循环
continue 跳出本次循环
next 跳出默认的当前循环 NR%2==1 next 跳过奇数行
awk '{if(NR%2==1){next}else{print}}' /etc/passwd
f) switch语句(类似case)
语法格式:switch(表达式){case 模式匹配值:执行语句;case …,default:执行语句}
8、数组
在awk中,数组和shell中的数组特性相同
注意:awk中数组不用定义,只要使用,就有值为空的默认数组
行遍历:整个文件进行遍历
列遍历:取对象的某一列进行遍历
注意:数组通过for语句,再给其他变量进行赋值时,赋的是索引信息
练习:统计/etc/fstab中每个单词(以空格隔开的词)的次数
awk -v RS=" " '{print}' /etc/fstab | awk '{a[$1]++}END{for(i in a){printf "%-50s = %-2d\n",i,a[i]}}'
9、函数
内置函数:
length() 统计字符串长度
数学上使用的函数 sin() cos() tan() …
sub(x,x,x) 替换第一个匹配到的值
awk -F: '{print sub(o,O,$1) }' /etc/passw第一列第一个o替换为O
gsub(x,x,x) 替换该行所有匹配到的所有值
awk -F: '{print gsub(o,O,$1) }' /etc/passwd第一列所有o替换为O
split(x,x,x) 指定分隔符去切割文件
netstat -tan | awk '/^tcp\>/{split($5,ip,":");print ip[1]}'
Linux--shell的awk--10的更多相关文章
- Linux Shell编程 awk命令
概述 awk是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入(stdin).一个或多个文件,或其它命令的输出.它支持用户自定义函数和动态正则表达式等先进功能,是l ...
- Linux Shell 命令--awk
说明: awk被设计用于数据流,能够对列和行进行操作.而sed更多的是匹配,进行替换和删除.awk有很多内建的功能,比如数组,函数等.灵活性是awk的最大优势. awk的结构}{i++}END{pr ...
- Linux Shell编程(10)——引用变量
当要引用一个变量的值时,一般推荐使用双引号.使用双引号除了变量名前缀($).后引符(`)和转义符(\)外,会使shell不再解释引号中其它所有的特殊字符.用双引号时$仍被当成特殊字符,允许引用一个被双 ...
- linux shell grep/awk/sed 匹配tab
处理文件的命令实在是多, sed, awk, grep等.遇到了需要匹配tab的情况, 记录一下. 例子如下:找出文本中第一列是1的行. 文本a 解法1 : 直接使用正则表达式, ^表示开头, \t表 ...
- 【转】Awk 命令学习总结、AWk命令系列学习(linux shell)
前面的话 学习linux 的同人,都知道linux shell文本处理能力非常强大.有一组强大的文本处理工具:grep,sed,awk . 其中grep 经常用作查找匹配文本.sed用作文本编辑替换. ...
- linux shell编程,先等10秒再判断是否有进程存在,存在就再等10秒再杀了进程才运行
linux shell编程,先等10秒再判断是否有进程存在,存在就再等10秒再杀了进程才运行 crontab每分钟执行一次,但5秒以上才有更新数据,有时候一分钟可能跑不完上一个进程,需要先等10秒再判 ...
- Awk 命令学习总结、AWk命令系列学习(linux shell)
AWK基本语法 下面没有提到awk命令怎么使用了,你可以通过 运行:awk –h 查询到所有命令及参数!下面把awk作为一门语言分节介绍. linux awk 内置变量使用介绍 awk语言中,怎么 ...
- Linux - Shell - cut: 低配 awk
概述 简述 shell 命令行工具 cut 背景 偶尔需要用 awk 来筛选特定的列 awk 很是强大 但是强大的背后, 却伴随着复杂 其实同样的功能, awk 也没有复杂多少 如果是 简单的任务, ...
- Linux Shell 重定向与管道【转帖】
by 程默 在了解重定向之前,我们先来看看linux 的文件描述符. linux文件描述符:可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以 ...
- 【shell 大系】Linux Shell常用技巧
在最近的日常工作中由于经常会和Linux服务器打交道,如Oracle性能优化.我们数据采集服务器的资源利用率监控,以及Debug服务器代码并解决其效率和稳定性等问题.因此这段时间总结的有关Linux ...
随机推荐
- MyBatis框架之SQL映射和动态SQL
使用MyBatis实现条件查询 1.SQL映射文件: MyBatis真正的强大之处就在于SQL映射语句,MyBatis专注于SQL,对于开发人员来说也是极大限度的进行SQL调优,以保证性能.下面是SQ ...
- VUE动态(自动)Loading【绑定到URL】,同页面多个Loading互不冲突
需求来源:当使用React时,使用 umi loading 很方便,页面对http请求发生改变时,也会自动改变loading的相关状态(true/false) 对VUE插件进行找寻,发现没找到合适内容 ...
- Ubuntu 16.04 LTS设置屏幕分辨率并永久保存所设置的分辨率
一.问题: 1.新装完Ubuntu 16.04 LTS后,进入系统打开命令行窗口,界面的分辨率显示是最小的: 2.进入System settings-->Displays 设置屏幕分辨率 显示& ...
- 在Docker中部署Spring Boot项目
想要获取更多文章可以访问我的博客 - 代码无止境. 微服务现在在互联网公司可谓非常流行了,之前找工作的的时候很多HR电话约面试的时候都会问对微服务是否有过接触.而微服务和Docker可以非常完美的结合 ...
- BGP属性控制实验
目录 实验拓扑 实验需求 实验步骤 个人小结: 实验拓扑 实验需求 更改BGP路由的属性让R4访问R1优先选R2这条路 实验步骤 1. 按照图示配置IP地址及环回口地址 R1 [R1]int g0/0 ...
- 经典SQL(sqlServer)
一.基础 .说明:创建新表create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) .分组: ...
- word 文档导出 (freemaker+jacob)--java开发
工作中终于遇到了 需要导出word文旦的需求了.由于以前没有操作过,所以就先百度下了,基本上是:博客园,简书,CDSN,这几大机构的相关帖子比较多,然后花了2周时间 才初步弄懂. 学习顺序: 第一阶 ...
- 记录用友T+接口对接的心酸历程
前言:公司的业务主要是对接财务系统做单据传输或者凭证处理的,难免少不了和各大财务软件做数据对接,其中当然是必须通过接口来传递数据了.于是乎,用友T+的版本来了,对接的工作自然是我来做,可没想到就是这样 ...
- zxing 扫码第三方SDK版本不兼容问题
在AndroidStudio环境下,或许会遇到下面的问题: Error:Execution failed for task ':app:preDebugAndroidTestBuild'. > ...
- Axure 使用 简单入门
1.Axure 简介 Axure是快速原型工具,简单来说就是把自己的web或app想法快速的展示出来的工具.具体信息百科:https://baike.baidu.com/item/axure%20rp ...