awk、变量、运算符、if多分支

awk

awk语言的最基本功能是在文件或字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作,完整的awk脚本通常用来格式化文本文件中的信息

语法
awk [options] ‘commands‘ files
option
-F 定义字段分隔符,默认的分隔符是连续的空格或制表符
使用option中的-F参数定义间隔符号
用$1,$2,$3等的顺序表示files中每行以间隔符号分隔的各列不同域
NF变量表示当前记录的字段数
-v 定义变量并赋值 也可以借用次方式从shell变量中引入

command
读前处理 行处理 读后处理
1.读前处理 BEGIN{awk_cmd1;awk_cmd2}
2.行处理:定址 命令 
定址方法: 正则,变量,比较和关系运算
正则需要用//包围起来 
^ 行首
$ 行尾
. 除了换行符以外的任意单个字符
* 前导字符的零个或多个
.* 所有字符
[] 字符组内的任一字符
[^] 对字符组内的每个字符取反(不匹配字符组内的每个字符)
^[^] 非字符组内的字符开头的行
[a-z] 小写字母
[A-Z] 大写字母
[a-Z] 小写和大写字母
[0-9] 数字
\< 单词头 单词一般以空格或特殊字符做分隔,连续的字符串被当做单词
\> 单词尾

awk -F: ‘$1 == "root"{print $1,NR,NF}‘ /etc/passwd
awk -F: ‘NR>20 || NR<3{print $1,$3,$NF}‘ /etc/passwd
awk -F: ‘NR>1 && NR<3{print $1,NR,NF}‘ /etc/passwd
awk -F: ‘NR>1 && NR<4{print $1,NR,NF}‘ /etc/passwd
awk -F: ‘$1~/^r/{print $1,NR,NF}‘ /etc/passwd
awk -F: ‘/^root/{print $1,NR,NF}‘ /etc/passwd

AWK变量
NR 当前记录的个数(全部文件连接后的统计) 
FNR 当前记录的个数(仅为当前文件的统计,非全部)
FS 字段分隔符 默认为连续空格或制表符,可以使用多个不同的符号做分隔符 -F[:/]
OFS 输出字符的分隔符 默认是空格
# awk -F: ‘OFS="=====" {print $1,$2}‘ /etc/passwd
root=====x
NF 当前读入行的字段个数
ORS 输出记录分隔符 默认是换行
# awk -F: ‘ORS="=====" {print $1,$2}‘ /etc/passwd
root x=====bin x=====
FILENAME 当前文件名

引用shell变量的方法
# a=root
# awk -v var=$a -F: ‘$1 == var {print $0}‘ /etc/passwd
或者 把整个命令拆开传递,让shell变量外露,
# awk -F: ‘$1 == "‘$a‘" {print $0}‘ /etc/passwd
# a=NF
# awk -F: ‘{print $‘$a‘}‘ /etc/passwd

运算符
+ - * / % ++ --
转义序列
\\ \自身
\$ 转义$
\t 制表符
\b 退格符
\r 回车符
\n 换行符
\c 取消换行

流程控制
分支结构

if (条件) 动作
若有多个动作,则要用大括号将动作体包含起来 if (条件) {动作1;动作2}
# awk -F: ‘{if ($1 == "root") print $1}‘ /etc/passwd
root

# awk -F: ‘{if ($1 == "root") {print $1;print $6}}‘ /etc/passwd
root
/root
#

if (条件1)
动作1
else
动作2
# awk -F: ‘{if ($1 == "root"){print $1}else print $6}‘ /etc/passwd
# awk -F: ‘{if ($1 == "root") print $1;else print $6}‘ /etc/passwd
上面两个命令是等价的,要么用分号隔开,表示第一个动作体的结束,要么将动作体用大括号定位范围

if (条件 1)
动作1
else if(条件 2)
动作2
else if(条件 3)
动作3
else
动作4
# awk -F: ‘{if ($1 == "root") print $1;else if ($1 == "seker") print $6;else if ($1 == "zorro") print $7;else print NR}‘ /etc/passwd
root
2
3
...
33
/home/seker
/bin/bash
36

条件 ? 动作1 : 动作2
expr?action1:action2
# awk -F: ‘var=($3 >= 500)?$1:"system_user" {print $1"\t"$3"\t"var}‘ /etc/passwd
# awk -F: ‘{print ($3>500?$1:$2)}‘ /etc/passwd

时间: 2024-09-28 02:45:24

awk、变量、运算符、if多分支的相关文章

awk 变量

awk 变量 1,-F 指明输入时用到的字段分隔符 awk -F: '{print $1}'/etc/passwd 使用冒号作为分隔符,打印passwd的第一行 2,使用print打印字符串 awk -F: '{print "hello,awk"}' /etc/passwd 注意:passwd文件有多少行,就打印多少行hello,awkhello,awk 的双引号不能去掉,用作表示hello,awk是字符串大括号外面使用单引号 awk -F: '{print "hello,a

速战速决 (1) - PHP: 概述, 常量, 变量, 运算符, 表达式, 控制语句

[源码下载] 作者:webabcd 介绍速战速决 之 PHP 概述 常量 变量 运算符 表达式 控制语句 示例1.概述basic/summary.php <!-- PHP 概述 --> <?php echo "我在 php 开始标记和结束标记之间"; echo "<br />"; ?> <?php if (time() % 2 == 0): ?> 我是 html(用于演示 php 和 html 混编) <br /

第一节 进制 常量 变量 运算符

计算机只能识别0.1代码. n进制转化为10进制: 当前位的数乘以基数的位数减1次方 10进制转化为n进制:连除倒去余的方法 一个字节代表8个二进制位 字节是计算机中最小的单位,我们平常说的内存2G就是说,有2G德字节. 常量:程序运行中值不发生变化的量 变量:程序运行中会发生变化的量 变量代表的是一个存储区域,存储区域内存储的内容就是变量的值. int a = 10; 变量类型  变量名   赋初值 变量名的命名规范: 由数字,字母,_组成,数字不能开头; 不能和系统关键字相同; 见名知意;

变量运算符

--表一:学生表 student--学号:code int (主键)从1开始--姓名:name varchar(50)--性别:sex char(10)--班级:banji char(10)--语文教师编号:yujiao int --数学教师编号:yujiao int --英语教师编号:yujiao int --表二:教师表 teacher--教师编号:code int (主键) 从1001开始--负责课程:lesson char(10)(语文.数学.英语)--年龄:age int--生日:bi

关键字,标识符,变量,运算符,程序流程控制,数组

关键字 所有字母都为小写 保留字 标识符 java中的名称命名规范 包名:多单词组成时所有字母都小写:xxxyyyzzz 类名,接口名:多单词组成时,所有的首字母大写:XxxYyyZzz 变量名,方法名:多单词组成时,前一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz 常量名:所有字母都大写,多单词时每个单词用下划线连接:XXX_YYY_ZZZ 变量 先声明后使用 数据类型  变量名 =初始化值 变量的分类 基本数据类型 引用数据类型 变量之间的运算 自动类型转换 :容量

Linux mysql shell脚本 变量和环境变量 位置参数 预定义变量 运算符 判断 流程控制 for循环 与用户交互 函数

mysql 1. 卸载旧版本 rpm -qa | grep mysql 检查是否有旧版本 查询结果:mysql-libs-5.1.73-7.el6.x86_64 rpm -e mysql-libs 删除旧版本 rpm -e --nodeps mysql-libs 强行删除 2. 安装mysql 2.1 安装源码需要编译 下载c的编译工具 yum -y install make gcc-c++ cmake bison-devel ncurses-devel 2.2 xftp连接上传 xftp连接上

7.JavaScript运算符和条件分支语句

三.运算符 运算符(Operators,也翻译为操作符),是发起运算的最简单形式. 运算符的分类见仁见智,我们的课程对运算符进行如下分类: 数学运算符(Arithmetic operators) 比较运算符(Comparison operators) 逻辑运算符(Logical operators) 赋值运算符(Assignment operators) 按位运算符(Bitwise operators) 条件 (三元) 运算符(Conditional operator) 3.1 数学运算符 +

JavaScript基础——变量-运算符-流程控制语句

JavaScript组成 一个完整的 JavaScript 实现是由以下 3 个不同部分组成的: ECMAScript:描述了该语言的语法和基本对象: 文档对象模型(Document Object Model,简称DOM)):描述处理网页内容的方法和接口: 浏览器对象模型(Browser Object Model,简称BOM)):描述与浏览器进行交互的方法和接口. 变量 变量类型:object string function boolean undefined null number JavaS

Javascript 基础—变量 &amp;运算符

经过找工作笔试的洗礼,感觉自己js语法方面掌握的不是很系统,今天来梳理下——变量以及运算符. 基础篇 和C语言的不同点:是一种弱类型语言,申明变量时不需要指定类型:变量名的命名方法也有不同:简单类型种类也有不同:类型可以相互转化 1.命名 是以字母,_,$开头的,由数字,字母,下划线 $组成的,不包括关键子,区分大小写的串称为标识符(加入了美元符号,不能以数字开头啦). 2. 申明 形式:var  keyname; 可以多个一起申明,可以申明时初始化. eg: var obj; var arr=

【2014】【辛星】【php】【秋季】【5】其他的变量运算符

**************字符串运算符****************** 1.字符串运算符是一个. 也就是一个点,这个点把左边的字符串和右边的字符串拼接为一个字符串. 2.比如$a = "辛星永"; $b = "爱小倩"; 那么$a.$b就是"辛星永爱小倩"; 3.我们写一个xin14.php练练手: <span style="font-family:KaiTi_GB2312;font-size:18px;">