move to github 点击打开链接
--------------------------------
------------------------------------------------
目录
简介 1
命令格式&说明 2
调用方法 3
域切分&操作 3
正则匹配 4
内置变量&操作 5
内置函数&操作 6
格式化输出 7
数组 8
条件判断&流程控制 9
与shell交互 10
awk与变量 10
错误排查 11
其他 11
简介
AWK:三位创造者Aho、Weinberger和Kernighan统称 |
官方定义:一个优秀的样式扫描与处理工具 定位:AWK是一种用于处理文本的编程语言工具,主要用于格式化报文或从一个大的文本文件中抽取数据。提取原来文本中行的某些域进行计算组合显示,出结果
【扫描文件中的每一行,查找与命令行中所给定内容相匹配的模式。如果发现匹配内容,则进行下一个编程步骤。如果找不到匹配内容,则继续处理下一行,直到文件末尾】
[Shell过滤工具中最难掌握的,语法复杂,错误提示不明确]
优点: 1.处理文件中的记录(与数据库相比) 2.简单,解释执行,不必编译(与C相比) 3.容易获得,unix自带(whereis awk) |
模式和动作 模式部分决定了动作语句何时触发及触发的事件【处理语句】 模式部分可省略,则动作对每一行执行;模式部分可以是任何条件语句、复合语句、正则表达式 |
命令格式及说明
格式: |
语法组成:【查找 -à 执行处理】 awk ‘pattern{action}’ filename 【注意,pattern在非括号中,用于查询筛选匹配行,action在括号中,action是在找到匹配内容时所执行的一系列命令,用于对筛选后的内容进行处理】
其中action内容可扩充,也可以有多个action。 格式: awk [ -F re] [parameter...] ['prog'] [-f progfile] |
参数说明: |
|
-F re |
允许awk更改其字段分隔符,默认空格 A.-F参数后紧跟单个分隔符,则用双引号“”,例如 –F”+” |
parameter |
该参数帮助为不同的变量赋值 |
'prog' |
awk的程序语句段。这个语句段必须用单拓号:'和'括起,以防被shell解释 |
-f progfile |
允许awk调用并执行progfile指定有程序文件 progfile是一个文本文件,他必须符合awk的语法 |
in_file |
awk的输入文件,awk允许对多个输入文件进行处理。 值得注意的是awk不修改输入文件。 如果未指定输入文件,awk将接受标准输入,并将结果显示在标准输出上。 awk支持输入输出重定向。 |
BEGIN{….} {…..} END{……} |
1 位置:’{}’ 2 作用:BEGIN和END的作用是给程序赋予初始状态和在程序结束之后执行一些扫尾的工作 BEGIN{}:awk开始扫描输入之前执行 (显示变量和预置(初始化)变量 ) END{}:在扫描完全部的输入之后执行 (最终结果 ) {}:操作
BEGIN部分:设置计数和打印头 END部分:打印输出文本总数及结尾状态标识 |
调用方法
调用方式: |
|
1 |
命令行;普通UNIX命令 ,用于解决简单的问题 |
2 |
利用命令解释器调用awk程序; 写入脚本文件,并在首行加入#!/bin/awk –f ,执行之 |
3 |
使用-f选项调用awk程序 所有awk插入一个单独文件然后调用 awk –f awk-script-file input-files |
域切分及操作
域的切分: |
A#B#C#D 分隔符为#,则$1:A $2:B ……注意,所有域为 $0 【print隶属于action,所以一定要放在{}中】
awk中,缺省的情况下总是将文本文件中的一行视为一个记录,而将一行中的某一部分作为记录中的一个字段。用$1,$2,$3...这样的方式来顺序地表示行(记录)中的不同字段,$0表示整个行(记录) |
示例: |
1. 打印所有行 |