linux读变量运算符,Linux/awk、变量、运算符、if多分支(示例代码)

一.awk语法

awk [options] ‘commands‘ files

option

-F 定义字段分隔符,默认的分隔符是连续的空格或制表符

使用option中的-F参数定义间隔符号

用$1,$2,$3等的顺序表示files中每行以间隔符号分隔的各列不同域

NF变量表示当前记录的字段数

-v 定义变量并赋值 也可以借用次方式从shell变量中引入

二.变量

变量命名规则

以字母或下划线开头,剩下的部分可以是:字母、数字、下划线.

最好遵循下述规范:

1.以字母开头

2.使用中划线或者下划线做单词的连接

3.同类型的用数字区分

4.对于文件最好加上拓展名

NR 表示AWK读入的行数

FNR表示读入行所在文件中的行数

# awk ‘{print NR,FNR,$1}‘ file1 file2

1 1 aaaaa

2 2 bbbbb

3 3 ccccc

4 1 dddddd

5 2 eeeeee

6 3 ffffff

#

逻辑运算 可直接引用域进行运算

== >= <= != > < ~ !~

# awk ‘NR==1 {print}‘ /etc/passwd

root:x:0:0:root:/root:/bin/bash

#

命令 {print $0}

读后处理 END {awk_cmd1;awk_cmd2;}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值