强大的文本处理工具之三awk
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了强大的文本处理工具之三awk相关的知识,希望对你有一定的参考价值。
文本处理三剑客之三,功能十分强大
基本用法
awk [opinions] ‘program‘ var=value file
awk [opinions] -f programfile var=value file
通常awk程序由:BEGIN语句块、可使用模式匹配的通用语句块、END语句块组成
基本格式
awk [options] ‘program‘ file
Pattern和action
- pattern部分决定动作语句何时触发以及触发事件
BEGIN ,END -
action statements对数据进行处理,放在 { } 内指明
print ,printf
分隔符、域和记录awk在执行时,由分隔符分隔的字段标记$1,$2,$3,$n称为域表示,$0为所有域,即默认打印所有信息 文件的每一行称为记录 省略 action,即默认执行print $0 的操作
工作原理
- 执行BEGIN { action } 语句块中的语句
- 从文件/标准输入读取第一行,然后执行pattern{ action ;…} 语句块,逐行执行知道文件读取完毕
-
当读至输入流末尾时,执行END{action;…}语句块
基本选项:-F 指明输入时用到的字段分隔符 // -v var=value 自定义变量[[email protected]~]# awk -F: ‘{print}‘ /etc/passwd
上述语句执行结果为/etc/passwd文件中的所有内容,因为print没有指定任何字段,默认打印所有内容[[email protected]~]# awk -F: ‘{print $1,$7}‘ /etc/passwd
上述语句执行结果为/etc/passwd文件中,以" : "为分隔符第一列和第七列的内容,默认中间用一个空格分隔[[email protected]~]# awk -v test=‘hello‘ BEGIN‘{print test}‘ /etc/passwd
上述语句执行结果只有一个hello,因为在awk里面-v 赋值test为hello,print打印test变量的值,由于前面有BEGIN,故只输出BEGIN语句块执行结果,不会输出和/etc/passwd文件行数一样多的hello,因为在BEGIN之后没有pattern语句
[[email protected]~]# awk -v test=‘hello‘ BEGIN‘{print test}‘‘{print $1,$7}‘ /etc/passwd
上述语句则会输出
以上是关于强大的文本处理工具之三awk的主要内容,如果未能解决你的问题,请参考以下文章