linux command Line and shell script bible(笔记十五)

26 篇文章 0 订阅

最近开学了...各种事情忙碌着。

一方面由于基地管理层有些人出现不给力的情况,弄得挺失望的。

但是很清楚,无论怎样都得坚持完自己的任期...相信这一个过程中自己也一定能学习成长不少的。



21.1  使用变量(内建变量、自定义变量)
21.1.1 内建变量
1.字段和数据行分隔符变量,在命令行用-F定义或在脚本给FS赋值
################gawk数据字段和数据行变量###########################
FIELDWIDTHS    由空格分隔的定义了每个数据字段确切宽度的一列数字,
FS        输入字段分隔符        
RS        输入数据行分隔符
OFS        输出字段分隔符
ORS        输出数据行分隔符
###################################################################
注意:一旦设置了FIELDWIDTHS变量,gawk就会忽略FS变量.如FIELDWIDTHS="2 2 2 2"把行数据分为2个字符长的四个字段
#################更多的gawk内建变量#####################################
ARGC    当前命令行参数个数
ARGIND    当前文件在ARGV中的闻之
ARGV    包含命令行参数的数组
CONVFMT    数字的转换格式;默认%.6 g
ENVIRON    当前shell环境变量及其值组成的关联数组
ERRNO    当读取或关闭输入文件发生错误时的系统错误号
FILENAME当作gawk输入数据的数据文件的文件名
FNR    当前数据文件中的数据行数
IGNORECASE    设成非零值时,忽略gawk命令中出现的字符串的字符大小写
NF    数据文件中的字段总数
NR    已处理的输入数据行数目
OFMT    数字的输出格式
RLENGTH    由match函数所匹配的子字符串的长度
RSTART    由match函数所匹配的子字符串的起始位置
##########################################################################
$ gawk '
>BEGIN{
>print ENVIRON["HOME"]     #数组索引中的文本是shell环境变量,而数组的值则是shell环境变量的值
>print ENVIRON['PATH']
>}‘

21.1.2 自定义变量
$ gawk '
>BEGIN{
>testing="lijiancai"
>print testing
>}'
*赋值语句可以包含数学表达算式来处理的数字值
2.在命令行上给变量赋值
$ cat script
BEGIN{FS=","}
{print $n}
$gawk -f script n=2 data    #允许改变n的值,从而输出不同的数据字段
但是当变量放在BEGIN的代码段中,就不能赋值了,如果要赋值把-v命令行参数放在脚本代码之前,如:$gawk -v n=2 -f script data
21.2.1 自定数组变量
var[index] = element
$gawk 'BEGIN{
>test["one"] = "testing"
>print test["one"]
>}'

21.2.2     遍历数组变量
for (var in array)
{
    statements
}
*for语句会在每次将关联数组array的下一个索引值赋给变量var,注意变量保存的是索引值而不是数组元素值。
21.2.3  删除数组变量
delete array[index] :删除命令会从数组中删除关联数组的索引值和相关的数据元素值
21.3.1  正则表达式:正则表达式必须放在它要控制的程序脚本的左花括号前
$ gawk 'BEGIN{FS=","} /test/{print $1}' data1   #输出匹配了test的行的第一个数据段
21.3.2 匹配操作符~:允许将正则表达式限定在数据行中的特定数据字段。
$ gawk 'BEGIN{FS=","} $2 ~ /^data/{print $0}' data1   #匹配第二个数据字段,且此表达式要以data开头
*格式:数据字段变量 ~ 正则表达式
注意:可以用!符号来排除正则表达式的匹配,如果没有找到匹配的文本,拿程序脚本就会作用到数据行。
$ gawk -F: '$1 !~ /love/{print $1,$NF}' /etc/passwd    #打印出第一字段不匹配此项的数据行的第一个字段和最后一个字段

21.3.3 数学表达式,也可一在匹配模式中使用数学表达式。
* x == y
* x <= y
* x < y
* x >= y
* x > y
当然也可一对文本数据使用这些表达式。如$ gawk -F, '$1 == "data"{print $1}' data

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值