awk内置函数Word格式文档下载.docx
- 文档编号:7772845
- 上传时间:2023-05-09
- 格式:DOCX
- 页数:16
- 大小:21.91KB
awk内置函数Word格式文档下载.docx
《awk内置函数Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《awk内置函数Word格式文档下载.docx(16页珍藏版)》请在冰点文库上搜索。
41000
vivi
2013-01-18
42800
2013-01-20
32500
2013-01-28
63500
~]#awk'
{split($2,a,"
-"
if(a[2]==01){b[$1]+=$4}}END{for(iinb)printi,b[i]}'
test.txt
2800
Tom2500
John4500
二、substr截取字符串
返回从起始位置起,指定长度之子字符串;
若未指定长度,则返回从起始位置到字符串末尾的子字符串。
substr(s,p)返回字符串s中从p开始的后缀部分
substr(s,p,n)返回字符串s中从p开始长度为n的后缀部分
~]#echo"
123"
|awk'
{printsubstr($0,1,1)}'
解释:
awk-F'
'
'
{printsubstr($3,6)}'
--->
表示是从第3个字段里的第6个字符开始,一直到设定的分隔符"
"
结束.
substr($3,10,8)
表示是从第3个字段里的第10个字符开始,截取8个字符结束.
substr($3,6)
表示是从第3个字段里的第6个字符开始,一直到结尾
三、length字符串长度
length函数返回没有参数的字符串的长度。
length函数返回整个记录中的字符数。
{printlength}'
四、gsub函数
gsub函数则使得在所有正则表达式被匹配的时候都发生替换。
gsub(regularexpression,subsitutionstring,targetstring);
简称gsub(r,s,t)。
举例:
把一个文件里面所有包含abc的行里面的abc替换成def,然后输出第一列和第三列
awk
$0~/abc/{gsub("
abc"
"
def"
$0);
print$1,$3}'
abc.txt
五、正则表达式
字符
功能
+
指定如果一个或多个字符或扩展正则表达式的具体值(在
+(加号)前)在这个字符串中,则字符串匹配。
命令行:
awk'
/smith+ern/'
testfile
将包含字符
smit,后跟一个或多个
h
字符,并以字符
ern
结束的字符串的任何记录打印至标准输出。
此示例中的输出是:
smithern,harrysmithhern,anne
?
指定如果零个或一个字符或扩展正则表达式的具体值(在?
(问号)之前)在字符串中,则字符串匹配。
/smith?
/'
smit,后跟零个或一个
字符的实例的所有记录打印至标准输出。
smith,alansmithern,harrysmithhern,annesmitters,alexis
|
指定如果以|(垂直线)隔开的字符串的任何一个在字符串中,则字符串匹配。
/allen|alan/'
将包含字符串
allen
或
alan
的所有记录打印至标准输出。
smiley,allensmith,alan
()
在正则表达式中将字符串组合在一起。
/a(ll)?
(nn)?
e/'
将具有字符串
ae
alle
anne
allnne
smiley,allensmithhern,anne
{m}
指定如果正好有
m
个模式的具体值位于字符串中,则字符串匹配。
/l{2}/'
打印至标准输出
smiley,allen
{m,}
指定如果至少
个模式的具体值在字符串中,则字符串匹配。
/t{2,}/'
打印至标准输出:
smitters,alexis
{m,n}
指定如果
和
n
之间(包含的m和n)个模式的具体值在字符串中(其中m<
=
n),则字符串匹配。
/er{1,2}/'
smithern,harrysmithern,annesmitters,alexis
[String]
指定正则表达式与方括号内
String
变量指定的任何字符匹配。
/sm[a-h]/'
将具有
sm
后跟以字母顺序从
a
到
排列的任何字符的所有记录打印至标准输出。
此示例的输出是:
smawley,andy
[^
String]
在[](方括号)和在指定字符串开头的^(插入记号)指明正则表达式与方括号内的任何字符不匹配。
这样,命令行:
/sm[^a-h]/'
smiley,allensmith,alansmithern,harrysmithhern,annesmitters,alexis
~,!
~
表示指定变量与正则表达式匹配(代字号)或不匹配(代字号、感叹号)的条件语句。
$1~/n/'
将第一个字段包含字符
^
指定字段或记录的开头。
$2~/^h/'
将把字符
作为第二个字段的第一个字符的所有记录打印至标准输出。
smithern,harry
$
指定字段或记录的末尾。
$2~/y$/'
y
作为第二个字段的最后一个字符的所有记录打印至标准输出。
smawley,andysmithern,harry
.
(句号)
表示除了在空白末尾的终端换行字符以外的任何一个字符。
/a..e/'
将具有以两个字符隔开的字符
和e的所有记录打印至标准输出。
smawley,andysmiley,allensmithhern,anne
*(星号)
表示零个或更多的任意字符。
/a.*e/'
将具有以零个或更多字符隔开的字符
smawley,andysmiley,allensmithhern,annesmitters,alexis
\
(反斜杠)
转义字符。
当位于在扩展正则表达式中具有特殊含义的任何字符之前时,转义字符除去该字符的任何特殊含义。
例如,命令行:
/a\/\//
将与模式a//匹配,因为反斜杠否定斜杠作为正则表达式定界符的通常含义。
要将反斜杠本身指定为字符,则使用双反斜杠。
有关反斜杠及其使用的更多信息,请参阅以下关于转义序列的内容。
这节详细介绍awk内置函数,主要分以下3种类似:
算数函数、字符串函数、其它一般函数、时间函数
一、算术函数:
以下算术函数执行与C语言中名称相同的子例程相同的操作:
函数名
说明
atan2(y,x)
返回y/x的反正切。
cos(x)
返回x的余弦;
x是弧度。
sin(x)
返回x的正弦;
exp(x)
返回x幂函数。
log(x)
返回x的自然对数。
sqrt(x)
返回x平方根。
int(x)
返回x的截断至整数的值。
rand()
返回任意数字n,其中0<
=n<
1。
srand([Expr])
将rand函数的种子值设置为Expr参数的值,或如果省略Expr参数则使用某天的时间。
返回先前的种子值。
举例说明:
[chengmo@centos5~]$awk'
BEGIN{OFMT="
%.3f"
;
fs=sin
(1);
fe=exp(10);
fl=log(10);
fi=int(3.1415);
printfs,fe,fl,fi;
}'
0.84122026.4662.3033
OFMT设置输出数据格式是保留3位小数
获得随机数:
BEGIN{srand();
fr=int(100*rand());
printfr;
78
31
41
二、字符串函数是:
函数
gsub(Ere,Repl,[In])
除了正则表达式所有具体值被替代这点,它和sub函数完全一样地执行,。
sub(Ere,Repl,[In])
用Repl参数指定的字符串替换In参数指定的字符串中的由Ere参数指定的扩展正则表达式的第一个具体值。
sub函数返回替换的数量。
出现在Repl参数指定的字符串中的&
(和符号)由In参数指定的与Ere参数的指定的扩展正则表达式匹配的字符串替换。
如果未指定In参数,缺省值是整个记录($0记录变量)。
index(String1,String2)
在由String1参数指定的字符串(其中有出现String2指定的参数)中,返回位置,从1开始编号。
如果String2参数不在String1参数中出现,则返回0(零)。
length[(String)]
返回String参数指定的字符串的长度(字符形式)。
如果未给出String参数,则返回整个记录的长度($0记录变量)。
blength[(String)]
返回String参数指定的字符串的长度(以字节为单位)。
substr(String,M,[N])
返回具有N参数指定的字符数量子串。
子串从String参数指定的字符串取得,其字符以M参数指定的位置开始。
M参数指定为将String参数中的第一个字符作为编号1。
如果未指定N参数,则子串的长度将是M参数指定的位置到String参数的末尾的长度。
match(String,Ere)
在String参数指定的字符串(Ere参数指定的扩展正则表达式出现在其中)中返回位置(字符形式),从1开始编号,或如果Ere参数不出现,则返回0(零)。
RSTART特殊变量设置为返回值。
RLENGTH特殊变量设置为匹配的字符串的长度,或如果未找到任何匹配,则设置为-1(负一)。
split(String,A,[Ere])
将String参数指定的参数分割为数组元素A[1],A[2],...,A[n],并返回n变量的值。
此分隔可以通过Ere参数指定的扩展正则表达式进行,或用当前字段分隔符(FS特殊变量)来进行(如果没有给出Ere参数)。
除非上下文指明特定的元素还应具有一个数字值,否则A数组中的元素用字符串值来创建。
tolower(String)
返回String参数指定的字符串,字符串中每个大写字符将更改为小写。
大写和小写的映射由当前语言环境的LC_CTYPE范畴定义。
toupper(String)
返回String参数指定的字符串,字符串中每个小写字符将更改为大写。
sprintf(Format,Expr,Expr,...)
根据Format参数指定的
printf
子例程格式字符串来格式化Expr参数指定的表达式并返回最后生成的字符串。
Ere都可以是正则表达式
gsub,sub使用
BEGIN{info="
thisisatest2010test!
gsub(/[0-9]+/,"
!
info);
printinfo}'
thisisatest!
test!
在info中查找满足正则表达式,/[0-9]+/用””替换,并且替换后的值,赋值给info未给info值,默认是$0
查找字符串(index使用)
[wangsl@centos5~]$awk'
printindex(info,"
test"
)?
ok"
nofound"
ok
未找到,返回0
正则表达式匹配查找(match使用)
printmatch(info,/[0-9]+/)?
截取字符串(substr使用)
printsubstr(info,4,10);
sisates
从第4个字符开始,截取10个长度字符串
字符串分割(split使用)
thisisatest"
split(info,tA,"
"
printlength(tA);
for(kintA){printk,tA[k];
}}'
4test
1this
2is
3a
分割info,动态创建数组tA,这里比较有意思,awkfor…in循环,是一个无序的循环。
并不是从数组下标1…n,因此使用时候需要注意。
格式化字符串输出(sprintf使用)
格式化字符串格式:
其中格式化字符串包括两部分内容:
一部分是正常字符,这些字符将按原样输出;
另一部分是格式化规定字符,以"
%"
开始,后跟一个或几个规定字符,用来确定输出内容格式。
格式符
%d
十进制有符号整数
%u
十进制无符号整数
%f
浮点数
%s
字符串
%c
单个字符
%p
指针的值
%e
指数形式的浮点数
%x
%X无符号以十六进制表示的整数
%o
无符号以八进制表示的整数
%g
自动选择合适的表示法
BEGIN{n1=124.113;
n2=-1.224;
n3=1.2345;
printf("
%.2f,%.2u,%.2g,%X,%o\n"
n1,n2,n3,n1,n1);
124.11,18446744073709551615,1.2,7C,174
三、一般函数是:
close(Expression)
用同一个带字符串值的Expression参数来关闭由print或printf语句打开的或调用getline函数打开的文件或管道。
如果文件或管道成功关闭,则返回0;
其它情况下返回非零值。
如果打算写一个文件,并稍后在同一个程序中读取文件,则close语句是必需的。
system(Command)
执行Command参数指定的命令,并返回退出状态。
等同于system
子例程。
Expression|getline[Variable]
从来自Expression参数指定的命令的输出中通过管道传送的流中读取一个输入记录,并将该记录的值指定给Variable参数指定的变量。
如果当前未打开将Expression参数的值作为其命令名称的流,则创建流。
创建的流等同于调用
popen
子例程,此时Command参数取Expression参数的值且Mode参数设置为一个是r的值。
只要流保留打开且Expression参数求得同一个字符串,则对getline函数的每次后续调用读取另一个记录。
如果未指定Variable参数,则$0记录变量和NF特殊变量设置为从流读取的记录。
getline[Variable]<
Expression
从Expression参数指定的文件读取输入的下一个记录,并将Variable参数指定的变量设置为该记录的值。
只要流保留打开且Expression参数对同一个字符串求值,则对getline函数的每次后续调用读取另一个记录。
getline[Variable]
将Variable参数指定的变量设置为从当前输入文件读取的下一个输入记录。
如果未指定Variable参数,则$0记录变量设置为该记录的值,还将设置NF、NR和FNR特殊变量。
打开外部文件(close用法)
BEGIN{while("
cat/etc/passwd"
|getline){print$0;
};
close("
/etc/passwd"
root:
x:
0:
/root:
/bin/bash
bin:
1:
/bin:
/sbin/nologin
daemon:
2:
/sbin:
逐行读取外部文件(getline使用方法)
BEGIN{while(getline<
){print$0;
BEGIN{print"
Enteryourname:
getlinename;
printname;
chengmo
调用外部应用程序(system使用方法)
BEGIN{b=system("
ls-al"
printb;
total42092
drwxr-xr-x14chengmochengmo
409609-3017:
47.
drwxr-xr-x95root
root
409610-0814:
01..
b返回值,是执行结果。
四、时间函数
mktime(YYYYMMDDHHMMSS[DST])
生成时间格式
strftime([format[,timestamp]])
格式化时间输出,将时间戳转为时间字符串
具体格式,见下表.
systime()
得到时间戳,返回从1970年1月1日开始到当前时间(不计闰年)的整秒数
创建指定时间(mktime使用)
BEGIN{tstamp=mktime("
20010101121212"
printstrftime("
%c"
tstamp);
2001年01月01日星期一12时12分12秒
BEGIN{tstamp1=mktime("
tstamp2=mktime("
20010201000"
printtstamp2-tstamp1;
2634468
求2个时间段中间时间差,介绍了strftime使用方法
tstamp2=systime();
308201392
strftime日期和时间格式说明符
格式
描述
%a
星期几的缩写(Sun)
%A
星期几的完整写法(Sunday)
%b
月名的缩写(Oct)
%B
月名的完整写法(October)
本地日期和时间
十进制日期
%D
日期08/20/99
日期,如果只有一位会补上一个空格
%H
用十进制表示24小时格式的小时
%I
用十进制表示12小时格式的小时
%j
从1月1日起一年中的第几天
%m
十进制表示的月
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- awk 内置 函数
![提示](https://static.bingdoc.com/images/bang_tan.gif)