`
chinamming
  • 浏览: 151492 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

AWK --脚本语言、工具详解 (GCC内嵌,如同SQL 字段驱动解析文本)

 
阅读更多

awk历史

AWK 是一种优良的文本处理 工具,LinuxUnix 环境中现有的功能最强大的数据处理 引擎之一。这种编程及数据操作语言(其名称得自于它的创始人 Alfred AhoPeter Weinberger Brian Kernighan 姓氏的首个字母)的最大功能取决于一个人所拥有的知识。 AWK 提供了极其强大的功能:可以进行正则表达式的匹配,样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。它具备了一个完整的语言所应具有的几乎所有精美特性。实际上 AWK 的确拥有自己的语言: AWK 程序设计语言 , 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。

最简单地说,AWK 是一种用于处理文本的编程语言工具。AWK 在很多方面类似于 Unix shell 编程语言,尽管 AWK 具有完全属于其本身的语法。它的设计思想来源于 SNOBOL4sed 、Marc Rochkind设计的有效性语言、语言工具 yacc lex ,当然还从 C 语言中获取了一些优秀的思想。在最初创造 AWK 时,其目的是用于文本处理,并且这种语言的基础是,只要在输入数据中有模式匹配,就执行一系列指令。该实用工具扫描文件中的每一行,查找与命令行中所给定内容相匹配的模式。如果发现匹配内容,则进行下一个编程步骤。如果找不到匹配内容,则继续处理下一行。

尽管操作可能会很复杂,但命令的语法始终是:

awk '{pattern + action}' {filenames}

其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern就是要表示的正则表达式,用斜杠括起来。

gawk 是 AWK 的 GNU 版本

如果说,通常意义上的文本工具或者是编程语言,都是以处理单个文件为单位的话,那么,awk则是好比是一个文本处理机,awk可以接收输入的文件,然后对文本中的文字进入处理然后输出。


awk 使用详解

awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息。

通常,awk是以文件的一行为处理单位的。awk没接收文件的一行,然后执行相应的命令,来处理文本。

调用awk

有三种方式调用awk:

第一:命令行方式

awk [-F field-separator] 'commands' input-file(s)

其中,commands 是真正awk命令,[-F域分隔符]是可选的。 input-file(s) 是待处理的文件。

在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。

例:

如果你的文件中,一行中,是用#号来作为每一项的分割符的时候,那么可以直接使用-F #来指定域分隔符为#

awk -F # 'commands' input-file(s)

从而使文本处理很方便了。

第二种:将所有的awk命令插入一个文件,并使awk程序可执行,然后awk命令解释器作为脚本的首行,一遍通过键入脚本名称来调用。

相当于shell脚本首行的:#!/bin/sh

可以换成:#!/bin/awk

第三种方式是将所有的awk命令插入一个单独文件,然后调用:

awk -f awk-script-file input-file(s)

其中,-f选项加载awk-script-file中的awk脚本,input-file(s)跟上面的是一样的。

awk基本语法特点

传统awk程序的配置如下:

pattern {action} 如果模式匹配,则执行操作

pattern 如果模式匹配,则打印记录(在不指定动作的情况下,默认会打印一条记录)

{action} 没有模式,则针对每条记录,执行操作

任何awk语句都是由模式和动作组成。在一个awk脚本中可能有许多语句,模式部分决定动作合适触发及触发事件。处理即是对数据进行操作。如果省略模式部分,动作将时刻保持执行状态,也就是说,如果模式部分省略了,则操作会针对每条记录无条件的执行。

awk语句中,用/······/来界定正则表达式,用‘ ’单引号来定界语句,实际动作在大括号{}内指明。通常都是:'{ action1;action2 }',{}中,如果有多条语句,例如print if 以及赋值,等,就必须用分号;来间隔,不能用空格作为语句动作分隔符。

模式可以是任何条件语句或者符合语句或者正则表达式。模式包括两个特殊字段 BEGIN和END。BEGIN语句使用在任何文本浏览动作之前,然后文本浏览动作依据输入文本开始执行。END语句用来在awk完成文本浏览动作之后执行。默认情况下,awk总是匹配或者打印行数。

awk读取文件记录的方式

awk每次在文件中读取一行,找到域分隔符(这里是#),设置其域n,直至一新行(这里是缺省记录分隔符\n 换行符),然后划分这一行作为一条记录,接着awk再次启动下一行读进程

test-file文件


域1 域分隔符 域2 域分隔符 域3 域分隔符 域4及换行


(记录1)feiyinzi # 200705 # 24 # 女 \n


(记录2)feiyinzilgd # 200706 # 27 # 男 \n


那么,awk工作流程是这样的:先执行BEGING,然后考试浏览文件,读入有\n换行符分割的一条记录,然后将记录按指定的#域分隔符划分域,填充域$n,那么这里对应的feiyinzi 为$1,200705即为域$2······一次类推,然后$0则表示所有域。然后开始执行模式所对应的动作action,然后开始读入第二条记录······直到所有的记录都读完,然后最后执行END操作。

例程:

我们想要打印每一条记录的姓名,则可以使用一下命令

  1. awk-F#'{print$1}'test-file
  2. 执行结果如下:
  3. feiyinzi
  4. feiyinzilgd

一般,可以使用BEGIN来打印报告头,END用来打印报告尾

  1. awk-F#'BEGIN{print"Name\n----------------\n"}{print$1}END{print"endoffile"}'
  2. 运行结果如下:
  3. Name
  4. --------------------------
  5. feiyinzi
  6. feiyinzilgd

awk的模式匹配中,正则表达式基本规则不变。

awk内置变量

awk有许多内置变量用来设置环境信息,这些变量可以被改变,下表中给出了最常用的一些变量。


ARGC 命令行参数个数

ARGV 命令行参数排列

ENVIRON 支持队列中系统环境变量的使用

FILENAME awk浏览的文件名

FNR 浏览文件的记录数

FS 设置输入域分隔符,等价于命令行 -F选项

NF 浏览记录的域的个数

NR 已读的记录数

OFS 输出域分隔符

ORS 输出记录分隔符

RS 控制记录分隔符


在对这些变量 设置中,可以放在{}之内,然后用分号;和其他的操作分开。

在实际运用当中,适当合理的使用这些变量,是非常有用的。

分享到:
评论

相关推荐

    MOXA_AWK-3121配置方法及要点说明

    MOXA AWK-3121 配置方法及要点说明 MOXA AWK-3121 是一种工业级无线设备,具有 web 功能配置、IP 网络参数设置、工作模式选择、功率增强等特点。本文将详细介绍 MOXA AWK-3121 的配置方法及要点说明。 一、Web ...

    无线AP藦萨AWK-3131A

    Moxa AWK-3131A 三合一工业级无线AP/Bridge/Client 支 持IEEE 802.11n 技术,数据传输率高达300Mbps,满足了 不断增长的快速数据传输和信号覆盖范围更广泛的要求。 AWK-3131A 符合各种工业标准,包括工作温度、输入...

    awk使用手册

    在UNIX世界里,存在许多强大的文本处理工具,其中awk作为一款出色的模式扫描与处理语言,却往往被人们所忽视。它的名字来源于三位创造者的名字首字母——Aho、Weinberg以及Kernighan。不同于sed或grep等其他命令行...

    awk教程--别人家的笔记

    - **定义**:`awk`是一种用于文本数据处理的强大工具,属于解释型编程语言。 - **用途**:主要用于数据分析、报告生成等场景,尤其适用于处理结构化的文本文件。 #### 二、awk的工作流程 - **读取(Read)**:`awk...

    Vim-101-hacks、Sed-and-Awk-101-Hacks、Linux-101-hacks 英文版(高清)PDF

    "Sed-and-Awk-101-Hacks"可能涵盖awk的基础知识,如字段分隔符、模式匹配、条件判断、循环和函数。通过awk,你可以方便地处理CSV文件,进行数据分析,甚至实现简单的脚本任务。 4. Linux-101-hacks:Linux操作系统...

    all-awk.rar_All.awk_NS2仿真_all awk_awk_awk-scripts

    《全面解析NS2仿真与AWK脚本:深入理解all-awk.rar》 在计算机科学领域,网络模拟和分析是至关重要的环节,特别是在设计和优化网络协议时。NS2(Network Simulator 2)是一个广泛使用的开源网络模拟工具,它允许...

    awk-培训.docx

    在Linux系统中,awk是一种强大的文本分析工具,尤其在处理数据和日志文件时非常有用。awk其实有多个版本,包括awk、nawk和gawk,而在CentOS系统中默认使用的是gawk。awk的工作原理是对文本文件的每一行进行处理,...

    MOXA_AWK3121配置方法

    首先,配置AWK-3121-EU的IP网络参数是实现设备接入网络的基础。通过Web界面可以设置IP地址、子网掩码以及默认网关,为设备提供唯一的网络身份标识。在网络配置中,详细步骤通常包括IP地址的静态分配或通过DHCP自动...

    AWK-file.rar_awk_awk tcl_delay awk_jitter awk _jitter ns-2

    7. **文件分析**: "AWK-file"很可能包含一系列的脚本或报告,这些脚本使用AWK语言解析和处理NS-2模拟输出的数据,从而得出网络性能的量化指标。 8. **性能优化**: 使用AWK进行这样的分析可以帮助网络工程师识别性能...

    awk-思维导图

    awk-思维导图

    awk-sed高级练习题pdf

    ### awk & sed 高级练习题解析 #### sed 命令详解 1. **删除一个文件的每行中的第1...以上练习题覆盖了 sed 和 awk 的基本用法以及一些复杂命令的应用,通过这些练习可以加深对这两个强大文本处理工具的理解和掌握。

    awk-script.zip_NS2 awk_awk_ns2_awk_trace

    标题"awk-script.zip_NS2 awk_awk_ns2_awk_trace"暗示我们关注的是一个`awk`脚本,它设计用来处理与`ns2`追踪相关的任务。`ns2`的追踪文件通常包含大量的网络活动信息,如节点位置、数据包传输、延迟等,而`awk`脚本...

    moxa AirWorks AWK-1137C User’s Manual

    摩沙AP用戶手冊

    awk文本处理工具

    awk是一种在Linux/Unix环境下广泛使用的文本处理工具,它是编程语言的一种,能够高效处理文本和数据。在Linux运维中,awk、sed和grep被称为“文本处理三剑客”,尤其在编写Shell脚本自动化任务时发挥着重要作用。awk...

    awk命令详解大全

    awk的功能远超一般的文本处理工具,它可以进行复杂的模式匹配和数据处理任务,几乎可以替代小型脚本语言进行编程。 #### 2. 为什么使用awk? - **文本处理需求普遍**:在日常工作中,我们经常需要处理文本文件中的...

    awk文本处理工具命令详解

    awk是Unix/Linux环境中的一种强大的文本分析工具,它的全称是"Awkward Kernel",但实际上,这个名字来源于它的三位创始人—— Alfred Aho、Peter Weinberger、Brian Kernighan 的首字母缩写。awk允许用户通过模式...

    Shell脚本之awk篇

    Shell脚本之awk篇主要介绍了awk工具在Linux/Unix系统下进行文本和数据处理的应用。awk是一种编程语言,特别适合于对文本文件进行分析和处理,它可以读取标准输入、文件或管道中的数据。awk的名称来源于其创始人...

    awk命令详解

    其中,-f 选项加载 awk-script-file 中的 AWK 脚本,input-file(s)跟上面的是一样的。 入门实例: 假设 last -n 5 的输出如下: [root@www ~]# last -n 5 仅取出前五行 root pts/1 192.168.1.100 Tue Feb 10 11:...

    awk教程-awk教程.rar

    **awk命令详解** awk是一种强大的文本分析工具,广泛应用于Linux和Unix系统中,用于处理结构化数据,如CSV、TSV格式的文件。它通过模式匹配和动作来处理输入流中的每一行,允许用户定制复杂的文本处理逻辑。下面将...

Global site tag (gtag.js) - Google Analytics