awk基本用法

RS,ORS,FS,OFS,NR,NF,$0,$n

RS 输入的行分隔号

ORS 输出的行分隔号

FS 输入的列分隔号

OFS 输出的列分隔号

NR 行号

NF 尾列号

$0 表示所有列(整行)

$n 表示第n列

例如:

shell> cat aa

1 2

3 4

5 6

shell> awk ‘BEGIN{ORS=",\n"}{print}‘ aa

1 2,

3 4,

5 6,

RS反之

shell> awk ‘BEGIN{ORS=",\n"}{print}‘ aa | awk ‘BEGIN{RS=",\n"}{print}‘

1 2

3 4

5 6

shell> awk ‘BEGIN{OFS="|"}{print $1,$2}‘

1|2

3|4

5|6

FS反之

shell> awk ‘BEGIN{OFS="|"}{print $1,$2}‘ | awk ‘BEGIN{FS="|"}{print $1,$2}‘

1 2

3 4

5 6

备注:

shell> ifconfig | awk -F "[ |:]+" ‘NR==2 {print $4}‘

等同于

shell> ifconfig | awk ‘BEGIN{FS="[ |:]+"};NR==2 {print $4}‘

运算符号

和shell相同

加+,减-,乘*,除/,求余%

逻辑符号

等于==,不等于!=,大于>,小于<,大于等于>=,小于等于<=,匹配~,不匹配!~

扩展逻辑运算符

与&&,或||,非!,括号()

awk -F ‘:‘ ‘{print $1,$2}‘ aa

-F参数,后面跟列分隔符号,默认是空格或者制表符

-F ":"等同于FS=":"

例如

ifconfig | awk -F "[ |:]+" ‘NR==2 {print $4}‘

等同于     ifconfig | awk ‘BEGIN{FS="[ |:]+"} NR==2 {print $4}‘

BEGIN和END

BEGIN即在正常输出的最上方添加输出或定义值

END是在正常输出的最下方添加输出

例如:

shell> seq 3 | awk ‘BEGIN {print "计算总和",total=0} {total=total+$0;{print $0}} END

{printf "total=%-5s\n",total}‘

结果是

计算总和 0                             ##BEGIN输出

1

2

3

total=6                                 ##END输出

if流程控制(判断语句)

{if () ...else ...}

例如:

shell> seq 3 | awk ‘BEGIN {print "奇数求和";total=0} {if ($1%2!=0) {print \

$1;total=total+$1} else {print $1}}END{printf "oddtotal=%-5s\n",total}‘

奇数求和

1

2

3

oddtotal=4

循环

while语句

{while()...}

例如:

shell> seq 3 | awk ‘{i=1;while(i<=2){print $0,i;i++}}‘

1 1

1 2

2 1

2 2

3 1

3 2

shell> seq 9| awk ‘{i=1;while(i<=$0){print i,"x",$0,"=",$0*i;i++}}‘

1 x 1 = 1

1 x 2 = 2

...

9 x 9 = 81

do...while语句

{do...while()}

这个语句感觉比较绕口,乍一看,以为是shell until的翻版,实际不是那么回事,还是

while语句,只是条件放到了最后。

例如:

shell> seq 3 | awk ‘{i=2;do {print i,$0;i--} while (i!=0)}‘

2 1

1 1

2 2

1 2

2 3

1 3

for语句

{for () ...}

shell> seq 3 | awk ‘{for (i=1;i<=2;i++) {print i,$0}}‘

1 1

2 1

1 2

2 2

1 3

2 3

break和continue,awk 也支持循环中断控制命令

等同于shell的break和continue

break跳出循环,执行循环的下一句

continue是跳出本次循环,执行循环的第一句

{

for ((i=1;i<=3;i++))

do

echo $i

if [ i = 2 ]

then

break

fi

done

echo 4

}

##这是一个shell脚本依次将break换成continue,exit和 ":" 就能看出来区别了

":"的输出是

1 2 3 4

continue输出是

1 3 4

break输出是

1 4

exit输出是

1

awk算术运算符

运算符用途

------------------

x^y x的y次幂

x**y 同上

x%y 计算x/y的余数(求模)

x+y x加y

x-y x减y

x*y x乘y

x/y x除y

-y 负y(y的开关符号);也称一目减

++y y加1后使用y(前置加)

y++ 使用y值后加1(后缀加)

--y y减1后使用y(前置减)

y-- 使用后y减1(后缀减)

x=y 将y的值赋给x

x+=y 将x+y的值赋给x

x-=y 将x-y的值赋给x

x*=y 将x*y的值赋给x

x/=y 将x/y的值赋给x x%=y 将x%y的值赋给x

x^=y 将x^y的值赋给x

x**=y 将x**y的值赋给x

操作符

x==y x等于y

x!=y x不等于y

x>y x大于y

x>=y x大于或等于y

x<y x小于y

x<=y x小于或等于y

x~re x匹配正则表达式re

x!~re x不匹配正则表达式re?

awk的操作符(按优先级升序排列)

= 、+=、 -=、 *= 、/= 、 %=

||

&&

> >= < <= == != ~ !~

xy (字符串连结,‘x‘y‘变成"xy")

+ -

* / %

++ --

数组

这个和shell差不多,区别是awk数组从1开始计数,shell是从0开始计数

V 函数用途或返回值

------------------------------------------------

N gsub(reg,string,target) 每次常规表达式reg匹配时替换target中的string

N index(search,string) 返回string中search串的位置

A length(string) 求串string中的字符个数

N match(string,reg) 返回常规表达式reg匹配的string中的位置

N printf(format,variable) 格式化输出,按format提供的格式输出变量variable。

N split(string,store,delim) 根据分界符delim,分解string为store的数组元素

N sprintf(format,variable) 返回一个包含基于format的格式化数据,variables是要放到

串中的数据

G strftime(format,timestamp) 返回一个基于format的日期或者时间串,timestmp是

systime()函数返回的时间

N sub(reg,string,target) 第一次当常规表达式reg匹配,替换target串中的字符串

A substr(string,position,len) 返回一个以position开始len个字符的子串

P totower(string) 返回string中对应的小写字符

P toupper(string) 返回string中对应的大写字符

A atan(x,y) x的余切(弧度)

N cos(x) x的余弦(弧度)

A exp(x) e的x幂

A int(x) x的整数部分

A log(x) x的自然对数值

N rand() 0-1之间的随机数

N sin(x) x的正弦(弧度)

A sqrt(x) x的平方根

A srand(x) 初始化随机数发生器。如果忽略x,则使用system()

G system() 返回自1970年1月1日以来经过的时间(按秒计算)

V 变量含义缺省值

--------------------------------------------------------

N ARGC 命令行参数个数

G ARGIND 当前被处理文件的ARGV标志符

N ARGV 命令行参数数组

G CONVFMT 数字转换格式 %.6g

P ENVIRON UNIX环境变量

N ERRNO UNIX系统错误消息

G FIELDWIDTHS 输入字段宽度的空白分隔字符串

A FILENAME 当前输入文件的名字

P FNR 当前记录数

A FS 输入字段分隔符空格

G IGNORECASE 控制大小写敏感0(大小写敏感)

A NF 当前记录中的字段个数

A NR 已经读出的记录数

A OFMT 数字的输出格式 %.6g

A OFS 输出字段分隔符空格

A ORS 输出的记录分隔符新行

A RS 输入的记录他隔符新行

N RSTART 被匹配函数匹配的字符串首

N RLENGTH 被匹配函数匹配的字符串长度

N SUBSEP 下标分隔符 "34"

附:printf简单说明

printf "%-3s,%.2f,%.2d\n" abcd 3.1415 1

abcd,3.14,01

%                         匹配对应位的值,后面跟格式

%-ns                            打印占n个字符,不足空格补齐,超出以实际字符数为准

%.nf                    打印小数点后n位,超出部分四舍五入,不足补零

%.nd                   打印数值占用n个字符数,不足补零,超出以实际数字为准

\n                        换行

\t                         制表符

%%                     %

附:综合实例

计算某文件夹下某种文件的总大小

shell> ls -Rl /var/log | grep "\.log$" | awk ‘BEGIN {OFS="\t";print "行号","文件名","大小";total=0} {if( $5 !=\ 0 ){print NR,$9,$5;total=total+$5} else {printf "null\n"}} END {printf "\nTotal Size: %.2fM\n",total/1024/1024}‘

行号    文件名  大小

1       auth.log        2557

2       daemon.log      106

3       emerge.log      3288

null

null

null

null

8       net-snmpd.log   181

null

10      syslog-ng.log   6242

11      user.log        1758

null

13      mysql.log       2870741

14      summary.log     3894

Total Size: 2.75M

awk基本用法,布布扣,bubuko.com

时间: 2024-08-01 10:46:48

awk基本用法的相关文章

Linux sed 和 awk的用法

sed用法: 原文链接:http://www.cnblogs.com/dong008259/archive/2011/12/07/2279897.html sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法sed命令行格式为:         sed [-nefri] 'command' 输入文本 常用选项:        -n∶使用安静(silent)模式.在一般 sed 的用法中,所有来自

AWK详细用法

awk非常的优秀,运行效率高,而且代码简单,对格式化的文本处理能力超强.基本上grep和sed能干的活awk全部都能干,而且干得更好. 先来一个很爽的例子:文件a,统计文件a的第一列中是浮点数的行的浮点数的平均值.用awk来实现只需要一句话就可以搞定(当然,这个东东用python也可以很轻松的实现,只是无论如何都得新建一个文件:别妄想用bash shell来做,那可是浮点数!!!)$cat a1.021 331#.ll   442.53 6ss    7awk 'BEGIN{total = 0;

awk数组用法

两个文件,从文件b首列查找出等于文件a的行并输出[[email protected] ~]# cat a1367[[email protected] ~]# cat b1 2 32 3 43 4 54 5 65 6 76 7 87 8 9 shell脚本[[email protected] ~]# cat jieguo #!/bin/bashy=`sed -n 'p' a |wc -l`  #a 行数x=`sed -n 'p' b |wc -l`  #b行数for((i=1;i<=$y;i++)

awk基本用法(一)

awk从FILE中读取文件,并采用指定的分隔符(默认为空格),将其分为多个段,每一个段的内容都放在$n(n为数字)中.$0表示一整行的内容. awk的用法: awk 'PATTERN{ACTION}' FILE 说明: PATTERN:为匹配模式.如果没有PATTERN,则表示匹配所有. ACTION:对匹配的内容所执行的操作.最简单的ACTION为print 内置变量: NF:表示的是Number of Field,即字段个数.如果是$NF,则表示的是最后一个字段. 示例1: [[email 

awk简单用法

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理. awk有3个不同版本: awk.nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本. 1.域分割符 awk 在没有使用-F 指定分割符的时候.默认以空格为分割符. 域分割 $0代表文本内容全文显示 $1 代表分割第一个域 $2 代表分割第二个域 依

awk命令用法及编程

awk(gawk):报告生成器,格式化文本输出:awk,gawk 基本用法:gawk [options] 'program' FILE ... program: PATTERN{ACTION STATEMENT};可以有多个,语句之间用分号分隔 print,printf 选项: -F:指明输入数据时用到的字段分隔符 -v var=value:自定义变量: 变量: 1)内建变量 FS:input field seperator(输入字段分隔符,默认为空白字符) #awk -v FS=':' '{p

awk常见用法总结

split用法 echo "hello_xiao_lan" | awk '{split($0,b,"_");print b[3]}' //substr用法 awk '{a=substr($1,2);print a}' file2 //求均值 awk '{ sum = $1+sum ;count++ } END {print count, sum,sum/count}' aa.txt awk '{max=($2>max?$2:max)} END {print m

awk的用法(转)

awk 用法:awk ' pattern {action} ' 变量名 含义 ARGC 命令行变元个数 ARGV 命令行变元数组 FILENAME 当前输入文件名 FNR 当前文件中的记录号 FS 输入域分隔符,默认为一个空格 RS 输入记录分隔符 NF 当前记录里域个数 NR 到目前为止记录数 OFS 输出域分隔符 ORS 输出记录分隔符 1.awk '/101/'               file 显示文件file中包含101的匹配行.    awk '/101/,/105/'     

awk基础用法

awk是神通广大的工具,不学一下的话,shell脚本写起来真的好艰难... awk有很多不同的版本,这里采用的是gawk(依我看,功能都差不多),它用来检索一些文件,从中找出匹配指定模式的行,然后在这些行上执行指定的动作. 基本格式如下: gwak options 'pattern {action}' file-list 其中,file-list是gawk的数据来源:options是一些特定的选项:主要部分"模式+动作"必须要放在单引号内,而且动作还要用花括号括起来.主要部分如果太多的