码迷,mamicode.com
首页 > 其他好文 > 详细

知识点小结~9

时间:2019-07-14 13:12:26      阅读:107      评论:0      收藏:0      [点我收藏+]

标签:code   函数   inf   字符   cal   编辑   技术   lib   图片   

文本三件客之~AWK

awk的语言风格更像c语言。

awk:{}内部有多条语句时,需用;隔开。

内置变量:

FS:filed separate 输入awk字段间分隔符

OFS:output filed separate 输出字段分隔符

RS:record separate 输入awk记录分隔符

ORS:output record separate 输入awk记录分隔符

NF:number field  字段数量

NR:number record  记录号

FNR:各文件分别记数

FILENAME:  当前文件名

ARGC:命令行参数个数    awk是第一个参数

ARGV:数组,保存的是命令行所给定的各参数,ARGV[0]awk

BEGIN{}:执行在操作文本之前,一般用于打印表头

以下三种写法输出相同结果

 技术图片

 awk中应用数组:

 技术图片

 通过文本的行数控制打印次数:

 技术图片

 END{}:操作文本完毕后执行,一般用于汇总。

字符串打印需要加“”,否则认为是变量,数字可不加双引号

 技术图片

 执行一次(BEGIN语句在操作文本前执行)

 技术图片

 -F参数:指定分隔符,print打印使用 “”内部被当做普通字符处理

 技术图片

 $1为第一列,$3为第二列

 技术图片

 指定默认分隔符:-v 定义变量

awk -v FS=":" ‘{print  $1FS$3}‘   分隔符可以指定分隔变量 作用同   awk -F ":" ‘{print $1":"$3}‘

 技术图片

 技术图片

 使用指定分隔符可使用正则表达式

 技术图片

 OFS  输出界定符

RS  默认记录分隔符为\n,(逐行处理)

ORS  默认输出记录分隔符为\n,可指定。

 技术图片

 awk中的变量无需加$符,位置变量$1  $2...$NF除外。单独使用NF时代表该条记录的字段数。(BEGIN END必须大写)

print 直接输出变量 ,自动输出换行; printf  格式化输出,需加\n才换行。

 技术图片

 无论是print还是printf在打印普通变量时无需加$符号,符合c语言风格。

 技术图片

 倒数第二个变量$(NF-1),

-F指定了两个字段分隔符时,若两个分隔符相邻出现时可认为两个分隔符中间有一个空列

无论是printf还是print当使用位置变量时需加$,内置参数NF为一个该行列数,为一个固定的数。

 技术图片

技术图片

技术图片

 区间匹配,若没有匹配到以M开头的行则显示到文件最后,条件后面不跟{}执行语句,默认执行{print $0}

 技术图片

 FNR:分文件打印记录号(行号);FILENAME:当前文件名称

 技术图片

 变量定义的三种方法

1awk -v name=""

2awk  {name=""}

3shell中定义变量,在awk中调用  username=user;awk  -v name=$username

技术图片

只有在执行脚本时例外,可理解为向脚本内部传参数

 技术图片

 内部定义变量覆盖外部定义变量

 技术图片

 若变量先打印再定义则第一行打印为空,从第二行开始变量生效

 技术图片

 -f  参数读入文件为命令,(其中条件为或的关系)

 技术图片

 文件中

 技术图片

 printf输出是若定义字符宽度小输出的参数,则定义参数无效。

printf命令格式:printf "format",item1,item2...

必须规定format;不会自动换行,需‘\n’

format中需要分别为后面每个item制定格式

 技术图片

 $0代表一行  NR(nmuber record):记录号为0的是:BEGIN输出的行号,第0行,表头

 技术图片

 模式匹配符:~:左边是否与右边匹配;!~:是否不匹配,支持正则表达式。

 技术图片

 技术图片

~:左边是否和右边匹配;包含的字符串可用/str/“str”

 技术图片

运算符优先级:!(取反) 优先级大于 >(大于号)

 技术图片

等价

 技术图片

技术图片

逻辑运算,非0非空则为真,0与空则为假。与函数返回值$?相区别。

真:结果为非0值,非空字符串都是真;

假:结果为空字符串或0值都是假。

 技术图片

 sed中打印奇数行和偶数行:

 技术图片

 length($i):内置函数,计算字符串长度。

rand():返回0-1之间的随机数,srand()生成随机数种子  srand(); int(rand()*MAX)

sub(r,s,[t]):对t字符串搜索;r表示模式匹配的内容,并将第一个匹配内容替换为s

sub(被替换的字符,替换成的字符,所要操作的字段)

echo "2008:08:08 08:08:08" | awk ‘sub(/:/,"-",$1)‘

echo "2008:08:08 08:08:08" | awk ‘{sub(/:/,"-",$1);print $0}‘

•gsub(r,s,[t]):对t字符串进行搜索;r表示的模式匹配的内容,并全部替换为s所表示的内容

echo "2008:08:08 08:08:08" | awk ‘gsub(/:/,"-",$0)‘

echo "2008:08:08 08:08:08" | awk ‘{gsub(/:/,"-",$0);print $0}‘

•split(s,array,[r]):以r为分隔符,切割字符串s,并将切割后的结果保存至array所表示的数组中,第一个索引值为1,第二个索引值为2,…,第n个索引值为n

split(被操作的字段,切割后的字段所要存放的数组名,切割字符)

netstat -tn | awk ‘/^tcp\>/{split($5,ip,":");count[ip[1]]++}

END{for (i in count) {print i,count[i]}}’

利用关联数组进行区别统计:

 技术图片

技术图片

 awkif判断语句

 技术图片

 next  参数, 结束本行处理,进行下一行的编辑处理

 技术图片

 awk中去重打印:

 技术图片

 awk内for循环体内只有一条语句时,可以不加{}

 技术图片

 这样写语法错误:

 技术图片

 这样写正确:

 技术图片

技术图片

 使用awk利用关联数组进行分组统计:

 技术图片

 awk 中通过system调用shell语言命令

 技术图片

 注意即便是通过system调用shell语言命令,其中的变量(位置变量除外)仍不需要加$

 技术图片

 使用脚本执行awk语句,在脚本外定义的变量若想在BEGIN中使用需使用-v参数。

 技术图片

 下图:第一条语句未使用-v定义变量,BEGIN输出为空;

 技术图片

 

知识点小结~9

标签:code   函数   inf   字符   cal   编辑   技术   lib   图片   

原文地址:https://www.cnblogs.com/FightMG/p/11183674.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!