linux awk 高级用法,AWK高级部分总结

1.awk内部变量和常量

FS:分隔符,FS="\t+" +表示一个或多个前一个字符,FS=“foo[0-9][0-9][0-9]”表示foo后面加3位数字分割

OFS:输出时每列的分隔符

NF:当前行中的字段数量

NR:当前行号

RS:分行符,默认为\n

ORS:输出记录分隔符,即为print语句结尾自动打印的字符

awk '{print "jim","tom","lilei"}' /etc/passwd 输出N多行 jim tom lilei,print中的列以“,”区分,输出结果中默认的列分隔符为空格“ ”;

awk 'BEGIN{OFS="--"} {print "jim","tom","lilei"}' /etc/passwd 将输出N多行的jim--tom--lilei,因为在BEGIN中将输出时的列分隔符设置为了--。

例子:address.txt文件内容如下:

Jimmy the Weasel

100 Pleasant Drive

San Francisco, CA 12345

Big Tony

200 Incognito Ave.

Suburbia, WA 67890

address.awk :

BEGIN{

FS="\n"

RS=""

OFS="--"

ORS="\n\n"

}

{

print $1, $2, $3

}

awk -f address.awk address.txt

结果为:

Jimmy the Weasel--100 Pleasant Drive--San Francisco, CA 12345

Big Tony--200 Incognito Ave.--Suburbia, WA 67890

address.awk的作用:以"\n"即回车分列符,""空行为分行符对address.txt进行解析,输出时的列分隔符为--,行记录的分隔符为“\n\n”即2个回车

2.循环结构

do{}while(),doWhile.awk

{

s=1

do{

print "the s is:" s

s++

}while(s<3)

}

for ,for.awk

{

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

print "the s is:" s

}

}

while循环,while.awk

{

s=1

while(s<3){

print "the s is :" s

s++

}

}

break和continue语句和c语句功能类似

3. 数组

awk的数组下标通常从1开始,array01.awk

{

myarray[1]="jim"

myarray[2]="123"

for(x in myarray){

print myarray[x]

}

}

其中x为myarray的下标,先遍历哪一个是无序的,即结果可能是 jim 123,也可能是123 jim

awk支持字符串下标,array02.awk

{

myarray["name"]="jim"

myarray["age"]="123"

for(x in myarray){

print "myarray[" x "]="myarray[x]

}

}

查找数组中的特定下标元素可以用“in”布尔运算符,如:if("age" in myarray)

4.格式化输出

printf(),sprintf()类似于C语言中的格式化输出。printf()会把格式化的字符串打印到stdout,而sprintf()返回格式化字符串可以赋值给变量

{

x=1

b="boo"

printf("%s got a %d on the last test\n","Jim",56)

myout=sprintf("%s--%d",b,x)

print myout

}

5.字符串函数          length(str),index(src,des),tolower(str),toupper(str),substr(src,index,len),match(src,regexp),sub/gsub(regexp,replstring,mystring),split(mystring,array,spit)

strFunc.awk {

mystring="naDTTdd you dni hao aaa you,kdnf90dd((((kdjfn"

print "mystring=" mystring

print "length(mystring)=" length(mystring)

print "index(mystring,\"you\")=" index(mystring,"you")

print "index(mystring,\"aaA\")=" index(mystring,"aaA")

print "tolower(mystring)=" tolower(mystring)

print "toupper(mystring)=" toupper(mystring)

print "substr(mystring,9,3)="substr(mystring,9,3)

print "match(mystring,/you/),RSTART,RLENGTH=" match(mystring,/you/),RSTART,RLENGTH

print "sub(/you/,\"YOU\",mystring)="sub(/you/,"YOU",mystring)

print "mystring=" mystring

nums=split(mystring,myarray," ")

print myarray[1],myarray[nums]

}

结果为:

mystring=naDTTdd you dni hao aaa you,kdnf90dd((((kdjfn

length(mystring)=45

index(mystring,"you")=9

index(mystring,"aaA")=0

tolower(mystring)=nadttdd you dni hao aaa you,kdnf90dd((((kdjfn

toupper(mystring)=NADTTDD YOU DNI HAO AAA YOU,KDNF90DD((((KDJFN

substr(mystring,9,3)=you

match(mystring,/you/),RSTART,RLENGTH=9 9 3

sub(/you/,"YOU",mystring)=1

mystring=naDTTdd YOU dni hao aaa you,kdnf90dd((((kdjfn

naDTTdd you,kdnf90dd((((kdjfn

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值