三.printf的使用

 

print format 生成报表

%d        十进制有符号整数

%u        十进制无符号整数

%f        浮点数

%s        字符串

%c        显示字符的ASCII码

%p        指针的值

%e        科学技术法显示数值

%x        %X 无符号以十六进制表示的整数

%o        无符号以八进制表示的整数

%g        %G 以科学计数法或浮点数的格式显示数值

%%        显示其自身

修饰符:

-:  左对齐

+:  显示数值符号

N: 显示

-F 指定段的分隔符

例:(1)生成报表

例:(2)小数问题

对小数取保留位的时候,四舍五入

对小数取整,不进行四舍五入

 [root@tx3 ~]# cat awk.1

 23.3456 11.234 45.67

 [root@tx3 ~]# awk '{printf "%.2f\t%.2f\t%.2f\n",$1,$2,$3}' awk.1

 23.3511.2345.67

四.awk的使用

(1)正则表达式

\(\)   \{\} 不支持

. * ^ $ ? + [] | \< \> ()  可以直接使用

 [root@tx3 ~]# awk '/^$/{print "this is an empty line"}' /etc/inittab

 this is an empty line

 this is an empty line

 this is an empty line

 this is an empty line

 this is an empty line

 this is an empty line

 this is an empty line

 this is an empty line

 this is an empty line
 [root@tx3 ~]# awk -F: '/^root/{print $1,$NF}' /etc/passwd

 root /bin/bash
 [root@tx3 ~]# awk -F: '!/^root/{print $1,$NF}' /etc/passwd|head -3  

 bin /sbin/nologin

 daemon /sbin/nologin

 adm /sbin/nologin

(2)关系运算符

> < == != >= <=

~(匹配) !~(不匹配)

例:

 [root@tx3 ~]# cp /etc/passwd p1

 [root@tx3 ~]# awk -F: '$3 == 0 {print $1}' p1

 Root

例:

 [root@tx3 ~]# awk -F: '$3 != 0{ print $1}' p1 | head -2

 bin

 Daemon

例:

 [root@tx3 ~]# awk -F: '$3 < 2 {print $1}' p1

 root

 bin

(3)逻辑运算符

&& || !

与 或 非

例:

 [root@tx3 ~]# awk -F: '$3 > 0 && $3 < 10 {print $1, $3}' p1 |head -2

 bin 1

 daemon 2

例:

 [root@tx3 ~]#  awk -F: '$3 > 10 || $3 < 5 {print $1,$3}' p1 |head -6

 root 0

 bin 1

 daemon 2

 adm 3

 lp 4

 operator 11

(4)算数运算符

+ - * / %(取模(余数)) ^(幂运算)

例:输出名字,总成绩,平均成绩

 [root@tx3 ~]# cat cj

 tx 90 86 86

 tx1 89 78 85

 tx2 79 80 85   
 [root@tx3 ~]#  awk '{print $1,$2+$3+$4,($2+$3+$4)/3}' cj

 tx 262 87.3333

 tx1 252 84

 tx2 244 81.3333
 [root@tx3 ~]# awk '{printf"%-5s %3d %.2f\n",$1,$2+$3+$4,($2+$3+$4)/3}' cj

 tx    262 87.33

 tx1   252 84.00

 tx2   244 81.33

(5)BEGIN  END

BEGIN{ 动作;动作;... }  在处理文件之前,要执行的动作;只执行一次

END{ 动作;动作;... }    在处理完文件之后,要执行的动作;只执行一次

BEGIN :可以给文件添加标题、定义变量、定义文件的分隔符

END:汇总的操作

getline可以从管道和标准输入读取输入,然后传递给变量。

例:

 [root@tx3 ~]# awk 'BEGIN{"date"| getline a}{print}END{print a}' cj

 tx 90 86 86

 tx1 89 78 85

 tx2 79 80 85  

 Thu Feb  7 12:39:25 CST 2013

五.awk里的流控制和循环

(1)简单的条件判断

语法:(表达式 ? 值1 : 值2) 如果表达式成立,输出值1;否则输出值2

 [root@tx3 ~]# cat num

 2 8 9

 8 4 6

 3 5 7

 [root@tx3 ~]# awk '{print ( $1 > $2 ? $1 : $2)}' num

 8

 8

 5

(2)if判断

语法:

{ if (表达式

{

动作1;动作2;...

}

}

如果表达式成立,那么执行动作。

 [root@tx3 ~]# awk '{if ($2>=80 && $2 <=100) {print $1,"great"} else {print $1, "good"}}' cj

 tx great

 tx1 great

 tx2 good

(2)多支判断

{

if (表达式)

{ 动作1;动作2;...}

else if (表达式)

{ 动作1;动作2;...}

else if (表达式)

{ 动作1;动作2;...}

......

else

{ 动作1;动作2;...}

}

 [root@tx3 ~]# cat cj

 tx 90 86 86

 tx1 89 78 85

 tx2 79 80 85  

 tx3 80 70 60

 tx4 75 85 65

 tx5 78 62 80

判断的标准:

90-100 A

80-89  B

70-79  C

60-69  D

0-59   E

 [root@tx3 ~]# awk '{ if ($2 >= 90 && $2 <= 100) {print $1,"A"} else if ($2 >= 80 && $2 < 90) {print $1,"B"} else if ($2 >= 70 && $2 < 80) {print $1,"C"} else if ($2 >= 60 && $2 < 70) {print $1,"D"} else {print $1,"E"} }' cj

 tx A

 tx1 B

 tx2 C

 tx3 B

 tx4 C

 tx5 C

(3)循环while

语法:'var=初值;while (表达式){动作1;...更新变量的动作;}'

例:

 [root@tx3 ~]# awk -F: '{i=1; while (i<=NF) {print $i;i++}}' p1 | head -7

 root

 x

 0

 0

 root

 /root

 /bin/bash

例. 方法一

 [root@tx3 ~]# awk -F: '{i=NF; while (i>=2) {printf $i ":";i--};print $1}' p1

 /bin/bash:/root:root:0:0:x:root

 /sbin/nologin:/bin:bin:1:1:x:bin

 /sbin/nologin:/sbin:daemon:2:2:x:daemon

 /sbin/nologin:/var/adm:adm:4:3:x:adm

例. 方法二

 [root@tx3 ~]# awk 'BEGIN { FS=":" } { i=NF; while (i>=2) {printf $i ":";i--};print $1}' p1

 /bin/bash:/root:root:0:0:x:root

 /sbin/nologin:/bin:bin:1:1:x:bin

 /sbin/nologin:/sbin:daemon:2:2:x:daemon

(4)for循环

语法:

{

for(表达式)

{动作1;...}

}

表达式:分为3部分:

(1)初始化表达式 i=1

(2)测试表达式   i<10

(3)更新测试表达式 i++

语句:

next 处理输入行的下一个输入行

exit 退出

continue 结束本次循环

break 跳出循环

例:

 [root@tx3 ~]# awk 'BEGIN {FS=":"} {for(i=NF;i>=2;i--) {printf $i ";"};print $1}' p1

 /bin/bash;/root;root;0;0;x;root

 /sbin/nologin;/bin;bin;1;1;x;bin

 /sbin/nologin;/sbin;daemon;2;2;x;daemon

 /sbin/nologin;/var/adm;adm;4;3;x;adm

 [root@tx3 ~]# cat num

 2 8 9

 8 4 6

 3 5 7

 [root@tx3 ~]# awk '{ max=0; i=1; while (i<=NF) { if (max<$i) {max=$i} i++} print max}' num

 9

 8

 7

(5)awk数组

例   使用变量作为数组下标

另外一种读取方式(这种是无序的,j是变量,a是数组)

数组有序

(6)函数

@1split 切割字符串

split("等待被切割的字符串",数组名,"切割用的分隔符")

[root@tx3 ~]# awk 'BEGIN{split("2012/08/23",da,"/");print da[2],da[3],da[1]}'
8 23 2012

@2toupper() 小写转大写

tolower() 大写转小写

 [root@tx3 ~]# awk '{print toupper($0)}' p1 |head -3

 ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH

 BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN

 DAEMON:X:2:2:DAEMON:/SBIN:/SBIN/NOLOGIN

@3sub()  局部替换

gsub() 全局替换

sub(/要替换的内容/,"替换成什么内容")

gsub(/要替换的内容/,"替换成什么内容")

gsub(/要替换的内容/,"替换成什么内容",指定字段如$7)

例:

 [root@tx3 ~]# awk -F: '{sub(/root/,"r00t");print}' p1

 r00t:x:0:0:root:/root:/bin/bash

例:

 [root@tx3 ~]# awk -F: '{gsub(/root/,"r00t");print}' p1

 r00t:x:0:0:r00t:/r00t:/bin/bash

 operator:x:11:0:operator:/r00t:/sbin/nologin

例:

 [root@tx3 ~]# awk -F[:/] '{gsub(/root/,"r00t",$7);print}' p1

 root x 0 0 root  r00t  bin bash

 operator x 11 0 operator  r00t  sbin nologin

@4.length() 计算字符串的长度

 [root@tx3 ~]# awk -F: '{print length($1),$1}' p1

 4 root

 3 bin

 6 daemon

 3 adm

@5. 数学计算

 [root@tx3 ~]# awk 'BEGIN{print sin(30)}'

 -0.988032

 [root@tx3 ~]# awk 'BEGIN{print cos(60)}'

 -0.952413

 [root@tx3 ~]# awk 'BEGIN{print int(22/6)}'

 3

 [root@tx3 ~]# awk 'BEGIN{print sqrt(3)}'

 1.73205

linux脚本Shell之awk详解(二)的更多相关文章

  1. linux脚本Shell之awk详解

    一.基本介绍1.awk: awk是一个强大的文本分析工具,在对文本文件的处理以及生成报表,awk是无可替代的.awk认为文本文件都是结构化的,它将每一个输入行定义为一个记录,行中的每个字符串定义为一个 ...

  2. Linux操作系统shell与函数详解

    shell和函数的定义 1. linux  shell 函数 将一组命令集或语句形成一个可用的块, 这些语句块称为函数. 2. shell  函数的组成 函数名:函数名字,注意一个脚本中函数名要唯一, ...

  3. Linux Shell系列教程之(八)Shell printf命令详解

    本文是Linux Shell系列教程的第(八)篇,更多shell教程请看:Linux Shell系列教程 在上一篇:Linux Shell系列教程之(七)Shell输出这篇文章中,已经对Shell p ...

  4. 【linux】linux命令grep + awk 详解

    linux命令grep  +  awk 详解 grep:https://www.cnblogs.com/flyor/p/6411140.html awk:https://www.cnblogs.com ...

  5. Linux shell tr 命令详解

    该随笔摘自 https://www.jb51.net/article/103892.htm Linux shell tr 命令详解 1. 用途 tr,translate的简写,主要用于压缩重复字符,删 ...

  6. Linux dts 设备树详解(二) 动手编写设备树dts

    Linux dts 设备树详解(一) 基础知识 Linux dts 设备树详解(二) 动手编写设备树dts 文章目录 前言 硬件结构 设备树dts文件 前言 在简单了解概念之后,我们可以开始尝试写一个 ...

  7. Linux进程上下文切换过程context_switch详解--Linux进程的管理与调度(二十一)

    1 前景回顾 1.1 Linux的调度器组成 2个调度器 可以用两种方法来激活调度 一种是直接的, 比如进程打算睡眠或出于其他原因放弃CPU 另一种是通过周期性的机制, 以固定的频率运行, 不时的检测 ...

  8. Linux CAT与ECHO命令详解 <<EOF EOF

    Linux CAT与ECHO命令详解 cat命令是Linux下的一个文本输出命令,通常是用于观看某个文件的内容的: cat主要有三大功能: .一次显示整个文件. $ cat filename .从键盘 ...

  9. Linux文件系统的目录结构详解

    Linux文件系统的目录结构详解   一.前 言 文章对Linux下所有目录一一说明,对比较重要的目录加以重点解说,以帮助初学者熟练掌握Linux的目录结构. 二.目 录 1.什么是文件系统 2.文件 ...

随机推荐

  1. 定时帧:NSTimer和CADisplayLink

    学习参考了:http://www.jianshu.com/p/c35a81c3b9ebhttps://zsisme.gitbooks.io/ios-/content/chapter11/frame-t ...

  2. TCP和UDP报文分片的区别

    搞了三年网络,今天才知道这个细节,汗,总结下: MTU大家都知道,是链路层中的网络对数据帧的一个限制,依然以以太网为例,MTU为1500个字节.一个IP数据报在以太网中 传输,如果它的长度大于该MTU ...

  3. 手动搭建SSI框架

    SSI框架为struts.spring.ibatis,在该框架中,使用ibatis作为数据持久层,其中ibatis使用最新版本mybatis3. 注:本文使用版本:struts-2.3.4.sprin ...

  4. Golang--计算文件的MD5值

    参考: http://blog.csdn.net/u014029783/article/details/53762363 用法: $ go run 01.go -f 1.txt b9d228f114d ...

  5. 在Pythonanywhere上部署Django

    1 在github上创建一个仓库blog 2 克隆到本地,添加Django项目,再推送到github 3 克隆到pythonanywhere,以后每次更新用git pull即可 4 在pythonan ...

  6. Java、C#双语版配套AES加解密示例

      这年头找个正经能用的东西那是真难,网上一搜索一大堆,正经能用的没几个,得,最后还是得靠自己,正巧遇上需要AES加解密的地方了,而且还是Java和C#间的相互加解密操作,这里做个备忘 这里采用的加解 ...

  7. js-常用数组方法总结

    [前面的话]说数组“万能”,可能夸张了一点,但是就个人观点,数组的运用是非常广泛的,这里的广泛当然也包含了在其他语言中的运用.举例说明,在javascript当中,由于字符串的不可变性,在进行字符串拼 ...

  8. win10桌面和手机的扩展API,判断是否有实体后退键API

    喜大普奔的win10 uap开发预览版终于出了,这次更新跟8.1的变化不是很大,但是将原本win8.1和wp8.1uap的分项目的形式,改为了整合成一个项目,经过一次编译打包成一个appx包,实现了无 ...

  9. html5权威指南:表格元素

    第十一章:表格元素                                                                                           ...

  10. Testing a Redux & React web application

    Part 1 - https://www.youtube.com/watch?v=iVKPbH3qyW0 Part 2 - https://www.youtube.com/watch?v=M5lwOs ...