linux awk 处理字符串,awk 字符串与算数处理
格式化输出
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
}
echo100|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函数默认使用整个记录。
gsub(regexp,replacement,target)
// gsub()函数替换所有匹配到的字符串
5.大小写转换
tolower(string) 将输入文本转为小写
toupper(string) 将输入文本转为大写
6. 字符串分割
split(string,array,regexp)字符串分割函数
将string切割为片段,并存储到数组里,分割字符串时的分隔符由正则regexp指定,省略regexp时默认为FS(空格).
eg.1
[root@web1 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]
}
}
[root@web1 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
[root@web1 test]#cat split.awk
# awk 字符串分隔函数
{
print"\nField seperator = :"
n=split($0,array,":") // 指定分隔符为 ":"
for(k=1;k<=n;k++)
{
print"array[k] = "array[k]
}
}
[root@web1 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
[root@web1 test]#awk'BEGIN{ s1 = "hello "; s2 = "ollir "; s = s1 s2 ; print s}'
hello ollir
[root@web1 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.
printint(10.6)
10
3.随机数
rand() 生成一个0-1之间的浮点型随机数
srand(x)为随机数发生器设置一个种子,种子数值为x,如果x未传入参数,则srand()函数将当前时间作为种子。
如果没有调用srand()来设置随机种子的话,awk在开始执行程序前默认以某个常量作为参数调用srand(),使得程序每次运行时都以同一个随机种子开始,这样使得所得的随机数序列每次运行都相同,这可以用于重复测试相同的操作。
eg.
[root@web1 test]#cat rand.awk
BEGIN{
# 没有显式调用srand()设置种子,awk使用默认常量作为参数传入srand()设置固定的种子
print rand() // 随机数固定
print rand()
# srand()使用当前时间作为参数上设置种子
srand()
print rand() //随机数与当前时间有关
print rand()
}
{}
[root@web1 test]#echo""|awk-f rand.awk
0.237788
0.291066
0.0421086
0.447394
[root@web1 test]#echo""|awk-f rand.awk
0.237788
0.291066
0.874176
0.562551
linux awk 处理字符串,awk 字符串与算数处理相关推荐
- linux 日志报告生成器,Linux报告生成器工具awk
Linux报告生成器工具awk awk:根据输入的信息格式化后显示出来 1.1.awk基本用法 awk [options] 'script' file1,file2,.... 或 awk [optio ...
- linux awk语法格式,Awk是什么?一文带运维小白快速掌握Linux Awk用法
原标题:Awk是什么?一文带运维小白快速掌握Linux Awk用法 作者:a8 Awk.sed与grep,俗称Linux下的三剑客,它们之间有很多相似点,但是同样也各有各的特色,相似的地方是它们都可以 ...
- linux shell脚本字符串连接符,学习Linux shell脚本中连接字符串的方法
这篇文章主要介绍了Linux shell脚本中连接字符串的方法,如果想要在变量后面添加一个字符,可以用一下方法: 代码如下: $value1=home $value2=${value1}"= ...
- linux命令终极系列awk
AWK man 手册:http://man.linuxde.net/awk AWK编程的内容极多,这里只罗列简单常用的用法,更多请参考 http://www.gnu.org/software/gawk ...
- linux忽略大小写 grep,linux grep不区分大小写查找字符串方法
grep用来过滤字符串信息,grep默认对字母大小写敏感,不过可以通过选项对grep屏蔽大小写敏感,该选项为 -i. 一.查看grep工具版本方法 图1 grep版本查询 二.grep -i 使用方法 ...
- Linux下生成随机数与字符串
日常生活中,会经常用到随机数,使用场景非常广泛,例如买彩票.丢骰子.抽签.年会抽奖等. Shell 下如何生成随机数呢,米扑博客特意写了本文,总结 Linux Shell 产生随机数的多种方法. 本文 ...
- 15分钟搞定Linux三剑客 grep sed awk
剑客grep 来者何人 grep是linux上的字符串搜索匹配命令.这个名字来自于linux编辑器vim的一个命令g/re/p,表示全局匹配某个正则表达式并打印出来,这也体现了grep自身的功能. 基 ...
- linux传递数组到awk,awk从放弃到入门(9):awk数组详解
在本博客中,AWK是一个系列文章,本人会尽量以通俗易懂的方式递进的总结awk命令的相关知识点. 这篇文章中的知识点是建立在前文的基础上的,如果你还没有掌握前文中的知识,请先参考之前的文章. 注:在阅读 ...
- linux中sed或awk,Linux中sed和awk命令比较实例
sed的工作原理 先读入一行,将读入的数据放入pattern space,执行编辑命令,处理完毕后把pattern space的内容打印出来,后面打印曾经去掉的回车符. 把pattern space的 ...
- linux 11121端口,Linux文本处理之awk
之前我介绍过sed,cut,tr,grep等等的命令来对文本进行处理,但是有时候发现这些命令并不能完全的满足我们的需求,直到我学习了awk,感觉以前有些比较繁琐的命令可以根据awk轻易解决,这些命令的 ...
最新文章
- 零基础怎么学UI设计
- 越南qq飞车服务器不稳定,qq飞车帧数不稳定,有时候玩的很顺,有时候画面一顿一顿,帧数不稳,怎么处理?...
- 百万数据下几种SQL性能测试
- kubernetes_建立Kubernetes概念验证的技巧
- leetcode题库:4.两个排序数组的中位数
- 软件测试中有关界面测试经验总结
- 常用的关系型数据库的优劣与选择
- 计算机报名照片无法显示,有关人事考试照片审核处理工具的问题
- Invalid or unexpected token 报错
- 第十五章 文件读写
- MySQL添加字段和修改字段
- 口罩机远程监控运维解决方案
- html5研究背景及意义,基于HTML5的统计图表系统的研究与设计
- Spring boot +Mybaits
- 机器学习实战——机器学习概览
- 关于windows 10开机自动修复的解决办法
- 债转股问题研究(lunwen+开题报告+外文翻译)
- C语言求一万以内的超级素数,用C语言求素数的优化.doc
- poj2228(dp)
- 调研239款APP后我们发现,新规之下,身份认证要变天?
热门文章
- 关于IDEA注释格式
- iproute 设置vlan命令
- 解决Incorrect username or password (access token)问题
- 【cocos2d-x】如何使用Cocos2D-x制作一款简单的iphoneAndroid游戏①
- python hog特征提取_HOG图像特征提取算法
- vue+element之carousel走马灯的使用(The use of vue+element carousel)
- 芝麻信用919分的大神长啥样?手把手教你提高芝麻分
- python3.7安装
- 处理数据库模糊查询%,_问题(JAVA)
- 模型机CPU设计——指令寄存器IR(7)