未加星标

awk 字符串与算数处理

字体大小 | |
[系统(linux) 所属分类 系统(linux) | 发布者 店小二03 | 时间 2017 | 作者 红领巾 ] 0人收藏点击收藏

格式化输出

awk提供两个高级输出函数 printf 和 sprintf ,他们提供了 格式化输出功能 。

- printf函数 将格式化字符串打印到标准输出 (stdout)

- sprintf 函数则返回“ 可以赋值给变量的字符串 ”

eg.

print.awk

# printf & sprintf { # 第一个字段 x=$1 b="foo" # 格式化输出 printf("%s got a %d on last test\n","Jim",83) # 将格式化的字符串赋给变量 myout=sprintf("%s - %d",b,x) # 简单输出,自带换行 print myout } echo 100| awk -f print.awk Jim got a 83 on last test foo - 100

格式化输出支持的 转义字符(格式说明符)

c ACII字符(char型) s 字符串 d 十进制整数 ld 十进制长整形 u 十进制无符号整数 lu 十进制无符号长整数 x 十六进制整数 lx 十六进制长整数 o 八进制整数 lo 八进制长整数 e 用科学计数法表示的浮点数 f 浮点数 g 选e/f中较短的一种

awk还支持一些修饰符,这些修饰符 跟在‘%’后面,出现在格式说明符之前 , 可以规定输出域的 宽度 和 对齐方式 。

printf的修饰符

- 左对齐修饰符 # 显示8进制数时在前面加个0;16进制数时在前面加个0x + 显示使用的d、e、f、g格式的整数时,前面加上正负号(+/-) 0 用0而不是空白来填充所显示的值

格式说明符和修饰符的使用方法:

%-width.precision format-specifier

eg.

%10s // 默认右对齐; 10:输出字段的域长度 至少 10个字符,不够10个,空白补齐;多余10个时,原样输出

%-10s // 同上, - 表示输出 左对齐

%10.5f // 字段输出至少10个字符宽度;5-小数点后5位

字符串函数

1. 子字符串 查找

index(str,subsr) 返回子串subsr在串str中第一次出现的索引(起始位置),index函数字符串的 开始位置为1 .(C语言为0)

2. 子字符串 提取

substr(str,position[,length]) 返回str中position位置开始的length个字符;缺省length时,返回positio位置开始的所有字符。

eg.

awk '{print substr($1,3)}' // 提取第一个域中从第三个字符起的所有字符

awk '{print substr($1,5,9)}' // 提取第一个域中从第5个字符起的后面9个字符

3. 字符串 匹配

match(string, /regexp/ ) 如果在string中找到 匹配正则/regexp/ 的子字符串,则返回 子字符串的起始位置 ,无法匹配,则返回0

区别: index()函数查找固定字符串的位置,match()支持正则匹配!

match()函数会影响两个系统变量:

RSTART :运行match()后,被设置为匹配上正则表达式的子字符串的起始位置。

RLENGTH: 运行match()后,被设置为匹配上正则表达式的子字符串的长度。

若无法匹配,RSTART被设置为0,RLENGTH被设置为-1。

4. 子字符串 替换

sub(regexp,replacement,target)

将target与正则表达式regrxp进行匹配,只替换匹配到的第一个字符串 ;如果target没有给定,则sub函数默认使用整个记录。

g sub(regexp,replacement,target)

// gsub()函数 替换所有匹配到的字符串

5.大小写转换

tolower(string) 将输入文本转为小写

toupper(string) 将输入文本转为大写

6. 字符串分割

split(string,array,regexp)字符串分割函数

将string切割为片段,并存储到数组里,分割字符串时的 分隔符由正则regexp指定,省略 regexp时 默认为FS(空格).

eg.1

[[email protected] test]#cat split.awk # awk 字符串分隔函数 { print"\nField seperator = FS \" "FS" \"" n=split($0,array) // 默认使用 空格 为字段分隔符 for(k=1;k<=n;k++) // split函数返回分割后的字符串的个数 { print"array[k] = "array[k] } } [[email protected] test]#echo"dfssfs sdf dsf dsf "|awk-f split.awk Fieldseperator=FS" " array[k]=dfssfs array[k]=sdf array[k]=dsf array[k]=dsf

eg.2

[[email protected] test]#cat split.awk # awk 字符串分隔函数 { print"\nField seperator = :" n=split($0,array,":") // 指定分隔符为 ":" for(k=1;k<=n;k++) { print"array[k] = "array[k] } } [[email protected] test]#head-n2/etc/passwd|awk-f split.awk Fieldseperator=: array[k]=root array[k]=x array[k]=0 array[k]=0 array[k]=root array[k]=/root array[k]=/bin/bash Fieldseperator=: array[k]=bin array[k]=x array[k]=1 array[k]=1 array[k]=bin array[k]=/bin array[k]=/sbin/nologin

split("",array) // 快速清空数组

7. 字符串重建

eg.1

[[email protected] test]# awk 'BEGIN{ s1 = "hello "; s2 = "ollir "; s = s1 s2 ; print s}' hello ollir [[email protected] test]# awk 'BEGIN{ s1 = "hello "; s2 = "ollir "; s = sprintf("%s%s",s1 ,s2); print s}' hello ollir

算术函数

1.常用函数

三角函数sin()、cos() // 输入参数为 弧度角,不是30°之类的角度,要转化为弧度

atan(x,y) // x,y范围内的余切

exp(x) // 以e为底数的指数

log() // 自然对数

sqrt() // 平方根

2.取整函数

int() 取实型数字的整数部分,直接忽略小数部分

eg.

print int(10.6) 10

3.随机数

rand() 生成一个0-1之间的浮点型随机数

srand(x)为随机数发生器设置一个种子,种子数值为x,如果x未传入参数,则srand()函数将当前时间作为种子。

如果没有调用srand()来设置随机种子的话,awk在开始执行程序前默认以某个常量作为参数调用srand(),使得程序每次运行时都以同一个随机种子开始,这样使得所得的随机数序列每次运行都相同,这可以用于重复测试相同的操作。

eg.

[[email protected] test]#cat rand.awk BEGIN{ # 没有显式调用srand()设置种子,awk使用默认常量作为参数传入srand()设置固定的种子 print rand() // 随机数固定 print rand() # srand()使用当前时间作为参数上设置种子 srand() print rand() //随机数与当前时间有关 print rand() } {} [[email protected] test]#echo""|awk-f rand.awk 0.237788 0.291066 0.0421086 0.447394 [[email protected] test]#echo""|awk-f rand.awk 0.237788 0.291066 0.874176 0.562551

linux常用命令之awk http://www.codesec.net/Linux/2016-09/135046.htm

Linux系统之文本格式化工具awk http://www.codesec.net/Linux/2016-02/128150.htm

AWK简介及使用实例 http://www.codesec.net/Linux/2013-12/93519.htm

Linux awk文本分析工具 http://www.codesec.net/Linux/2015-12/126217.htm

Linux文本处理工具之awk http://www.codesec.net/Linux/2015-01/111437.htm

如何在Linux中使用awk命令 http://www.codesec.net/Linux/2014-10/107542.htm

文本分析工具-awk http://www.codesec.net/Linux/2014-12/110939.htm

AWK入门基础教程 http://w

本文系统(linux)相关术语:linux系统 鸟哥的linux私房菜 linux命令大全 linux操作系统

主题: LinuxAWKC语言变量
分页:12
转载请注明
本文标题:awk 字符串与算数处理
本站链接:http://www.codesec.net/view/521663.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 系统(linux) | 评论(0) | 阅读(17)