格式化输出

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 字符串与算数处理相关推荐

  1. linux 日志报告生成器,Linux报告生成器工具awk

    Linux报告生成器工具awk awk:根据输入的信息格式化后显示出来 1.1.awk基本用法 awk [options] 'script' file1,file2,.... 或 awk [optio ...

  2. linux awk语法格式,Awk是什么?一文带运维小白快速掌握Linux Awk用法

    原标题:Awk是什么?一文带运维小白快速掌握Linux Awk用法 作者:a8 Awk.sed与grep,俗称Linux下的三剑客,它们之间有很多相似点,但是同样也各有各的特色,相似的地方是它们都可以 ...

  3. linux shell脚本字符串连接符,学习Linux shell脚本中连接字符串的方法

    这篇文章主要介绍了Linux shell脚本中连接字符串的方法,如果想要在变量后面添加一个字符,可以用一下方法: 代码如下: $value1=home $value2=${value1}"= ...

  4. linux命令终极系列awk

    AWK man 手册:http://man.linuxde.net/awk AWK编程的内容极多,这里只罗列简单常用的用法,更多请参考 http://www.gnu.org/software/gawk ...

  5. linux忽略大小写 grep,linux grep不区分大小写查找字符串方法

    grep用来过滤字符串信息,grep默认对字母大小写敏感,不过可以通过选项对grep屏蔽大小写敏感,该选项为 -i. 一.查看grep工具版本方法 图1 grep版本查询 二.grep -i 使用方法 ...

  6. Linux下生成随机数与字符串

    日常生活中,会经常用到随机数,使用场景非常广泛,例如买彩票.丢骰子.抽签.年会抽奖等. Shell 下如何生成随机数呢,米扑博客特意写了本文,总结 Linux Shell 产生随机数的多种方法. 本文 ...

  7. 15分钟搞定Linux三剑客 grep sed awk

    剑客grep 来者何人 grep是linux上的字符串搜索匹配命令.这个名字来自于linux编辑器vim的一个命令g/re/p,表示全局匹配某个正则表达式并打印出来,这也体现了grep自身的功能. 基 ...

  8. linux传递数组到awk,awk从放弃到入门(9):awk数组详解

    在本博客中,AWK是一个系列文章,本人会尽量以通俗易懂的方式递进的总结awk命令的相关知识点. 这篇文章中的知识点是建立在前文的基础上的,如果你还没有掌握前文中的知识,请先参考之前的文章. 注:在阅读 ...

  9. linux中sed或awk,Linux中sed和awk命令比较实例

    sed的工作原理 先读入一行,将读入的数据放入pattern space,执行编辑命令,处理完毕后把pattern space的内容打印出来,后面打印曾经去掉的回车符. 把pattern space的 ...

  10. linux 11121端口,Linux文本处理之awk

    之前我介绍过sed,cut,tr,grep等等的命令来对文本进行处理,但是有时候发现这些命令并不能完全的满足我们的需求,直到我学习了awk,感觉以前有些比较繁琐的命令可以根据awk轻易解决,这些命令的 ...

最新文章

  1. 零基础怎么学UI设计
  2. 越南qq飞车服务器不稳定,qq飞车帧数不稳定,有时候玩的很顺,有时候画面一顿一顿,帧数不稳,怎么处理?...
  3. 百万数据下几种SQL性能测试
  4. kubernetes_建立Kubernetes概念验证的技巧
  5. leetcode题库:4.两个排序数组的中位数
  6. 软件测试中有关界面测试经验总结
  7. 常用的关系型数据库的优劣与选择
  8. 计算机报名照片无法显示,有关人事考试照片审核处理工具的问题
  9. Invalid or unexpected token 报错
  10. 第十五章 文件读写
  11. MySQL添加字段和修改字段
  12. 口罩机远程监控运维解决方案
  13. html5研究背景及意义,基于HTML5的统计图表系统的研究与设计
  14. Spring boot +Mybaits
  15. 机器学习实战——机器学习概览
  16. 关于windows 10开机自动修复的解决办法
  17. 债转股问题研究(lunwen+开题报告+外文翻译)
  18. C语言求一万以内的超级素数,用C语言求素数的优化.doc
  19. poj2228(dp)
  20. 调研239款APP后我们发现,新规之下,身份认证要变天?

热门文章

  1. 关于IDEA注释格式
  2. iproute 设置vlan命令
  3. 解决Incorrect username or password (access token)问题
  4. 【cocos2d-x】如何使用Cocos2D-x制作一款简单的iphoneAndroid游戏①
  5. python hog特征提取_HOG图像特征提取算法
  6. vue+element之carousel走马灯的使用(The use of vue+element carousel)
  7. 芝麻信用919分的大神长啥样?手把手教你提高芝麻分
  8. python3.7安装
  9. 处理数据库模糊查询%,_问题(JAVA)
  10. 模型机CPU设计——指令寄存器IR(7)