shell awk
来源:互联网 发布:酷云eye收视数据猎场 编辑:程序博客网 时间:2024/05/21 13:59
三种方式调用awk
1 awk [opion] 'awk_script' input_file1 [input_file2....]
-F fs :使用fs作为输入记录的字段分隔符,如果省略该选项,使用默认
-f filename :从文件filename中都取awk_script
-v var=value: 为awk_script 设置变量
2 将awk_script放入脚本文件并以#!/bin/awk -f作为首行,给予该脚本执行权限
3将所有的awk_script插入一个单独脚本文件,调用,awk -f wak脚本文件
awk 命令的一般形式:
awk 'BEGIN {actions}
awk_pattern1 {actions}
.........
END {actions} ' inputfile
awk 的运行过程:
如果BEGIN区块存在,awk执行它指定的actions
awk从输入文件中读取一行,称为一条记录。
awk将读入的记录分割成字段,将第1个字段放入变量$1
把当前输入记录依次与每一个awk——cmd中awk_pattern比较。
这个过程一直持续,到awk读取都文件尾。
当awk读完所有的输入行后,如果存在END,就执行相应的actions.
inputfile 可以是多余一个文件的文件列表,awk将按顺序处理表中的每个文件。
awk_pttern 可以是以下几种类型
1.正则表达式用作awk_pattern:/regexp/
awk中正则表达式匹配操作中经常用到的字符:
\ ^ . [] * // 通用的regexp元字符
+:匹配其前的单个字符一次以上,不适用grep或sed
?:匹配其前的单个字符1次或0次,不适用grep 或sed
2 布尔表达式用作awk_pattern
表达式可以使用变量和/regexp/
布尔表达式中的操作符:关系操作符,匹配操作符
actions 就是对awk读取的记录数据进行操作。
awk的命令
print 参数列表;print 可以打印字符串,变量,表达式,是awk最基本的命令。
printf 个时候打印命令,语法与C语言的printf函数类似。
next:强迫awk立即停止处理当前的输入文件而处理输入文件列表的下一个文件。
nextfile:强迫awk立即停止处理当前的输入文件而处理输入文件列表中的下一个文件
exit:使awk停止执行而跳出,如果有END存在,awk会执行END的actions.
awk的语句:awk的语句主要是赋值语句,用来给变量赋值。
把直接值或一个变量值赋值给变量。如果直接值是字符串要加双引号。
awk 'BEGIN {x=1 y=3 x=y print "x="x "y="y}'
把一个表达式的赋值给变量。表达式一般式数值表达式,也可以是其他表达式。
num1 operator num2
当num1或者num2是字符串而不是数字时,无论是否加有双引号,awk都视其值为0
awk 'BEGIN {x=3 x+=2 y=x+2 print "x="x "y="y}'
awk 'BEGIN {x=3 y=x>4?"OK":4 print "x=" "y="y}'
awk的变量
awk内部变量:awk的内部变量用于存储awk运行时的各种参数,
自动内部变量:
NF:当前输入字段的字段数
NR:对当前输入文件而言,已经被awk读取过的记录的数目。
FNR:已经被awk读取过的记录的总数目。
FILENAE:当前输入文件的文件名
ARGC:命令行参数个数
ARGIND:当前被处理的文件在数组ARGV内的索引
FS:输入记录的字段分隔符
OFS:输出记录的字段分隔符
OFMT:数字的输出格式
RS:输入记录间的分隔符
ORS输出记录间的分隔符
ARGV:命令行参数数组
ENVIRON:存储系统当前环境变量值得数组,
自定义变量
定义变量:varname=value
awk的内置函数
int(x) 求出X的整数部分,
sqr(x) 求出x正德平方根值。
exp(x) 求出x的次方。eg:exp(x) 即是求e*e
log(x) 求出x的自然对数
sin(x),cos(x),atan2(y,x)
rand();
srand(x);
index(in,find)
length(s)
match(s,r);
sprintf();
substr(str,st,len);
split(s,a,fs);
tolower(str);
toupper(str);
close(filename );
system(command)
自定义函数
自定义函数的格式:自定义函数可以在awk 程序的任何地方定义,
function fun_name(parameter_list){body-of-function}
awk ‘{print "sum=",SquareSum($1,$2)}
function SquareSum(x,y){sum=x*x+y*y return sum}' test.txt
awk 数组:使用前,不必预先定义,也不必指定数组元素个数。
访问数组元素:for(element in array_name) print array_name[element]
awk 'BEGIN{print split ("123#456#789",mya,"#") for(i in mya){print mya[i]}}'
- shell-awk
- SHELL [awk]
- shell awk
- shell awk
- shell awk
- shell awk
- shell awk
- shell awk
- shell awk
- shell awk
- shell awk
- shell awk
- [shell] awk
- shell--awk
- shell-awk
- AWK----awk与shell交互
- shell: awk最新教程
- shell基础九:awk
- Cracking The Coding Interview
- freeswitch centos 安装
- ubuntu下安装mysql
- linux下c语言动态库生成方法
- JavaMelody、prob系统监控工具使用配置
- shell awk
- iOS 开发之Target-action模式
- 拖拽四边形的四角实现变形
- struts2文件上传与错误信息国际化
- [Leetcode] Reverse Words in a String
- HDU 1856 More is better
- mysql 乱码
- 慢慢聊后台进程
- 动态数据透视表pivot table(行转换列)