文本处理三剑客之一----------awk

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文本处理三剑客之一----------awk相关的知识,希望对你有一定的参考价值。

简单的说awk是一门类似于shell的编程语言,是一种强大的文本处理工具,它的设计思想来源于 SNOBOL4 、sed 、Marc Rochkind设计的有效性语言、语言工具 yacc 和 lex ,当然还从 C 语言中获取了一些优秀的思想。

它有着属于自己的独特的语法表达方式,虽然操作可能会比较复杂,但是语法格式始终都是:

awk [options] ‘program‘ file…

program: {pattern + action}‘ 或者  ‘pattern {action}‘

pattern部分决定动作语句何时触发及触发事件

    BEGIN,END

action statements对数据进行处理,放在{}内指明

    print, printf

分割符、域和记录

awk执行时, 由分隔符分隔的字段(域)标记$1,$2..$n称为域标识。 $0为所有域,注意:和shell中变量$符含义不同

文件的每一行称为记录,默认的字段分隔符就是空格

省略action,则默认执行print $0 的操作

它的基本用法如下:

awk [options] ‘program’ var=value file…
awk [options] -f programfile var=value file…
awk [options] ‘BEGIN{ action;… } pattern{ action;… } END{action;… }‘ file ...

----------------------------------------------------------例题解析-----------------------------------------------------------------------


  1. awk -F: ‘{if($3>1000){printf "common user:%s\n",$1"}else {printf "root or sysuser: %s\n",$1}}‘ /etc/passwd

技术分享

2. awk -v test=‘hello gawk‘ ‘BEGIN{print test}‘ /etc/passwd

技术分享

3.awk -F: ‘{print name,$1;name="sysuser"}‘

 awk -v OFS=":" -F: ‘{name-"systemuser";print name,$1‘} /etc/passwd

 awk -v name="systemuser" -v OFS=":" -F: ‘{print name,$1}‘ /etc/passwd

技术分享

技术分享

技术分享

4.awk -F: -f awk.txt /etc/passwd 

注意动作可以写在里面文本里。

技术分享

5.awk -F: ‘BEGIN{print "username      userid\n------------\n"}{printf "%-20s|%10d\n,$1,$3"}‘ /etc/passwd

技术分享

6.awk -F: ‘BEGIN{print "username-------------uuid"}{printf "username:%15s \t uuid:%d\n",$1,$3}‘ /etc/passwd

技术分享

7.awk -F: ‘{$3>=1000?usertype="Common User":usertype="Sysadminor SysUser";printf "%15s:%-s\n",$1,usertype}‘ /etc/passwd

技术分享

8. awk -F" " ‘/^jkj\>/,/^haha\>/{print $1,$2}‘ aa

技术分享

9. awk -v test=‘hello gawk‘ ‘BEGIN{print test}‘ /etc/passwd

技术分享

--------------------------------------------------------------------------------------------------例题进阶---------------------------------------------------------------------------------------------------------------------

1.seq 10 |awk ‘i=!i‘

 seq 10 |awk ‘!i‘

技术分享

2.seq 10 |awk ‘i=!i‘

 seq 10 |awk ‘{!i;print !i}‘

 seq 10 |awk ‘{i=!i;print !i}‘

技术分享

3.seq 10 |awk ‘{!i}‘

 seq 10 |awk ‘{print !i}‘

 seq 10 |awk ‘!i‘

技术分享

4.seq 10 |{i=!i;print i}

技术分享

5.seq 10 |awk ‘!(i=!i)‘

 seq 10 |awk -v i-=1 ‘i=!i‘

技术分享

6.awk -F: ‘{if($3>=1000) {printf "Common user: %s\n",$1} else{printf "root or Sysuser: %s\n",$1}}‘ /etc/passwd

技术分享

7.df -h |awk -F% ‘^/\/dev/{print $1}‘ |awk ‘$NF>=80{print $1 "\t" $5}‘

技术分享

8. awk ‘/^[[:space:]]*linux/{i=1;while(i<=N

本文出自 “12994186” 博客,请务必保留此出处http://13004186.blog.51cto.com/12994186/1968294

以上是关于文本处理三剑客之一----------awk的主要内容,如果未能解决你的问题,请参考以下文章

Linux文本处理三剑客之一——awk详解——awk看这两篇就够啦~PS:文末有练习,来练练手吧

文本处理三剑客之awk(原创)

     awk (三剑客之一)

Linux文本三剑客之一——awk详解——awk看这两篇就够啦~PS:文末有练习,来练练手吧

Linux文本处理三剑客之awk

linux文本处理三剑客之一:grep