关于awk

关于awk

使用方法awk'{pattern + action}'{filenames}

pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern就是要表示的正则表达式,用斜杠括起来。awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息。通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。

调用awk有三种方式调用awk1.命令行方式awk[-Ffield-separator]'commands'input-file(s)其中,commands是真正awk命令,[-F域分隔符]是可选的。input-file(s)是待处理的文件。在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。

awk工作流程是这样的:读入有’n’换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,0则表示所有域,1表示第一个域,$n表示第n个域。默认域分隔符是”空白键” 或 “键”

1.基本命令格式 awk [-F 以...分割] '操作'
eg:

test5 
name wangyifan age 18
name zhangsan age 16 
name lisi age 19
name wangwu age 20
1. cat test5.txt | awk '{print $1","$4}'   没加 -F 默认以空格进行分割
结果: 
name,18
name,16
name,19
name,20
name:wangyifan age:18
name:zhangsan age:16 
name:lisi age:19
name:wangwu age:20 
cat test5.txt | awk -F ':' '{print $2 $4}'
结果:
wangyifan18
zhangsan16 
lisi19
wangwu20

  1. BEGIN END 的用法
cat test5.txt | awk -F ':' 'BEGIN{print "姓名" "年龄"} {print $1 "---" $4} END{print "hahaha" "end end end"}'

执行流程:
awk工作流程是这样的:先执行BEGING,然后读取文件,读入有/n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,0则表示所有域,1表示第一个域,$n表示第n个域,随后开始执行模式所对应的动作action。接着开始读入第二条记录······直到所有的记录都读完,最后执行END操作。

  1. awk 搜索
    这种是pattern的使用示例,匹配了pattern(这里是wangyifan)的行才会执行action(没有指定action,默认输出每行的内容)。
awk -F ':' '/wangyifan/{print $2}' test5.txt
结果:  
wangyifan
awk -F ':' '/1[0-9]?/{print $2}' test5.txt    # 支持正则
# 结果
wangyifan
zhangsan
lisi
  1. awk 内置变量

ARGC命令行参数个数
ARGV命令行参数排列
ENVIRON支持队列中系统环境变量的使用
FILENAMEawk浏览的文件名
FNR浏览文件的记录数
FS设置输入域分隔符,等价于命令行-F选项
NF浏览记录的域的个数
NR已读的记录数
OFS输出域分隔符
ORS输出记录分隔符
RS控制记录分隔符

eg:
awk -F ":" '{print "文件名",FILENAME "行数",NR "域数",NF}'  test5.txt 
结果:
文件名 test5.txt行数 1列数 4
文件名 test5.txt行数 2列数 4
文件名 test5.txt行数 3列数 4
文件名 test5.txt行数 4列数 4

6.自定义变量 (坑)

cat test5.txt | awk -F ':' 'BEGIN{aaa="qwe123";print aaa}{print $1,$7} END{print "bbb"}'
#  注意 BEGIN 里面调用变量的时候不加 $
  1. printf (python 格式化字符串) printf()
awk -F ':' '{printf("filename %s,rownum %s,linenum %s, content %s",FILENAME,NR,NF,$0)}' test5.html
  1. awk 操作符

(1)算数操作符
-x
+x
x^y
x*y
x
y
x/y
x+y
x-y
x%y
(2)赋值操作符
=
+=
-=
*=
/=
%=
++
--
(3)布尔值
awk中,任何非0值或者非空字符串都为真,反之为假
(4)比较操作符:>,<,>=,<=,==,!=,,!(x ~ y,字符串能被表达式y匹配)
(5)逻辑操作符:&&,||,!

awk -F ':' '$1=="root"{printf("%s 是管理员账户",$1)}'   # 匹配到就打印匹配不到没有输出结果
结果:
root 是管理员账户
  1. 总结几种常见的操作模式
    正则
awk -F '/reg/{xxx操作}' filename    #  按照正则匹配操作 如果匹配到就执行,如果匹配不到不执行

表达式

例:
awk -F ':' '$1=="root"{printf("%s 是管理员账户",$1)}' /etc/passwd
结果:   root 是管理员账户
匹配范围         
awk -F ':' '$1=="root",$1=="admin1"{printf("username %s shell %s" "\n"),$1,$7}' /etc/passwd
结果:
username root shell /bin/bash
username bin shell /sbin/nologin
username apache shell /sbin/nologin
username saslauth shell /sbin/nologin
username postfix shell /sbin/nologin
username mysql shell /bin/bash
username pulse shell /sbin/nologin
username sshd shell /sbin/nologin
username tcpdump shell /sbin/nologin
username admin1 shell /bin/bash
#    代表从root 到 admin1账户 

最后

grep 更适合单纯的查找或匹配文本
sed 更适合编辑匹配到的文本
awk 更适合格式化文本,对文本进行较复杂格式处理

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,509评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,806评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,875评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,441评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,488评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,365评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,190评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,062评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,500评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,706评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,834评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,559评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,167评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,779评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,912评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,958评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,779评论 2 354

推荐阅读更多精彩内容

  • 转载 原文的排版和内容都更加友好,并且详细,我只是在这里贴出了一部分留作自己以后参考和学习,如希望更详细了解AWK...
    XKirk阅读 3,214评论 2 25
  • awk介绍awk变量printf命令:实现格式化输出操作符awk patternawk actionawk数组aw...
    哈喽别样阅读 1,564评论 0 4
  • 一. AWK 说明 awk的处理文本和数据的方式:它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并...
    西华子阅读 933评论 0 4
  • awk: grep,sed,awk grep:文本过滤 sed:文本编辑 awk:文本格式化工具; 1 什么是aw...
    木林森阅读 1,782评论 0 16
  • awk:报告生成器,格式化文本输出 内容: awk介绍 awk基本用法 awk变量 awk格式化 awk操作符 a...
    BossHuang阅读 1,457评论 0 9