跳至正文

awk语法格式,awk 语法

awk汉字正则匹配

awk汉字正则匹配

[root@localhost ~]# echo "塞纳河饼屋" | awk ‘{if($1~/^[a-z][a-z][a-z][a-z][a-z][a-z]/) print 1}’ [root@localhost ~]# 我这里没输出,你环境不对!

c语言中system和awk怎么用啊。

c语言中system和awk怎么用啊。

C语言中用system() 执行shell命令:system(“shell命令”)

主要需要解释的是awk,awk主体中的语法其实与C类似,只不过其中用到了正则匹配。

格式:awk ‘{主体}’ 文件

backbone.c就是awk要处理的文件。

$0~/^\\/\\*\\*/ :

格式:$0 ~ /正则表达式/

作用:判断$0是否匹配正则表达式 ^\\/\\*\\*

含义:awk是逐行读入并处理的,$0代表整行数据;

正则表达式中 ^ 表示一行的开头,斜杠前要加转义符以免被认为是正则表达式的定界符,*表示匹配0个或多个前面的字符。

总体来讲,就是只处理backbone.c文件中匹配 /^\\/\\*\\*/ 的行与匹配 /\\*\\*\\// 的行中间的内容,并通过print打印到屏幕。

一个awk正则表达式的问题: awk ‘{if($3="FuTian" && $4="M")print $0}’ student.dat

一个awk正则表达式的问题: awk '{if($3="FuTian" && $4="M")print $0}' student.dat

awk 等于是==,$3=="FUTIAN" && $4=="M"就可以了=相当于赋值

解释下这个awk正则表达式

ps -aef |grep ora_pmon_orcl |grep -v grep |awk ‘{print $2} 这一句,是在进程中过滤出 ora_pmon_rocl ,grep -v grep 就是不包含grep 命令本身这一进程, 然后把结果管道给awk, 让awk 打印第二列(进程号PID),并把结果赋值给变量check. 下面的while循环语句,就是如果变量check为真,也就是有ora_pmon_rocl的PID存在,那么执行循环体 sleep 3, check=`…` ,就是暂停3秒,又重复以上的动作. 所以,这段shell的作用,就是每隔3秒就检查一下 ora_pmon_rocl 进程是不是alive.

awk的用法

我们都知道awk的模式是pattern{action},就是当pattern成立时进行action的动作,乍一看,上面咋不符合这个模式呢?其实是省略啦!awk有一些默认的省略规则,省略action部分时表示默认为“{print $0}”,也就是打印整行内容;pattern部分为“/^-/”,是一个正则表达式,其实也是省略的写法啦,完整的写法为“$0 ~ /^-/”,所以扩充完应该为“awk ‘$0 ~ /^-/ {print $0}”,意思就是“打印第一个字符为-的行”,那么整行代码的意思就是“统计目录/userhome/mumsg/PRL/下的常规文件数目”.

awk中如何使用正则以匹配重复字符

正则表达式的特点

正则表达式由以下内容组合而成:

普通字符,例如空格、下划线、A-Z、a-z、0-9。

可以扩展为普通字符的元字符,它们包括:

(.)

它匹配除了换行符外的任何单个字符。

(*)

它匹配零个或多个在其之前紧挨着的字符。

[ character(s) ]

它匹配任何由其中的字符/字符集指定的字符,你可以使用连字符(-)代表字符区间,例如 [a-f]、[1-5]等。

^

它匹配文件中一行的开头。

$

它匹配文件中一行的结尾。

\

这是一个转义字符。

你必须使用类似 awk 这样的文本过滤工具来过滤文本。你还可以把 awk 自身当作一个编程语言。但由于这个指南的适用范围是关于使用 awk 的,我会按照一个简单的命令行过滤工具来介绍它。

awk 的一般语法如下:

# awk ‘script’ filename

此处

‘script’

是一个由 awk 可以理解并应用于 filename 的命令集合。

它通过读取文件中的给定行,复制该行的内容并在该行上执行脚本的方式工作。这个过程会在该文件中的所有行上重复。

该脚本

‘script’

中内容的格式是

‘/pattern/ action’

,其中

pattern

是一个正则表达式,而

action

是当 awk 在该行中找到此模式时应当执行的动作。

如何在 Linux 中使用 awk 过滤工具

在下面的例子中,我们将聚焦于之前讨论过的元字符。

一个使用 awk 的简单示例:

下面的例子打印文件 /etc/hosts 中的所有行,因为没有指定任何的模式。

# awk ‘//{print}’ /etc/hosts

awk 打印文件中的所有行

结合模式使用 awk

在下面的示例中,指定了模式

localhost

,因此 awk 将匹配文件

/etc/hosts

中有

localhost

的那些行。

# awk ‘/localhost/{print}’ /etc/hosts

awk 打印文件中匹配模式的行

在 awk 模式中使用通配符 (.)

在下面的例子中,符号

(.)

将匹配包含 loc、localhost、localnet 的字符串。

这里的正则表达式的意思是匹配 l一个字符c。

# awk ‘/l.c/{print}’ /etc/hosts

使用 awk 打印文件中匹配模式的字符串

在 awk 模式中使用字符 (*)

在下面的例子中,将匹配包含 localhost、localnet、lines, capable 的字符串。

# awk ‘/l*c/{print}’ /etc/localhost

使用 awk 匹配文件中的字符串

你可能也意识到

(*)

将会尝试匹配它可能检测到的最长的匹配。

让我们看一看可以证明这一点的例子,正则表达式

t*t

的意思是在下面的行中匹配以

t

开始和

t

结束的字符串:

this is tecmint, where you get the best good tutorials, how to’s, guides, tecmint.

当你使用模式

/t*t/

时,会得到如下可能的结果:

this is t

this is tecmint

this is tecmint, where you get t

this is tecmint, where you get the best good t

this is tecmint, where you get the best good tutorials, how t

this is tecmint, where you get the best good tutorials, how tos, guides, t

this is tecmint, where you get the best good tutorials, how tos, guides, tecmint

/t*t/

中的通配符

(*)

将使得 awk 选择匹配的最后一项:

this is tecmint, where you get the best good tutorials, how to’s, guides, tecmint

结合集合 [ character(s) ] 使用 awk

以集合 [al1] 为例,awk 将匹配文件 /etc/hosts 中所有包含字符 a 或 l 或 1 的字符串。

# awk ‘/[al1]/{print}’ /etc/hosts

使用 awk 打印文件中匹配的字符

下一个例子匹配以

K

k

开始头,后面跟着一个

T

的字符串:

# awk ‘/[Kk]T/{print}’ /etc/hosts

使用 awk 打印文件中匹配的字符

以范围的方式指定字符

awk 所能理解的字符:

[0-9]

代表一个单独的数字

[a-z]

代表一个单独的小写字母

[A-Z]

代表一个单独的大写字母

[a-zA-Z]

代表一个单独的字母

[a-zA-Z 0-9]

代表一个单独的字母或数字

让我们看看下面的例子:

# awk ‘/[0-9]/{print}’ /etc/hosts

使用 awk 打印文件中匹配的数字

在上面的例子中,文件 /etc/hosts 中的所有行都至少包含一个单独的数字 [0-9]。

结合元字符 (^) 使用 awk

在下面的例子中,它匹配所有以给定模式开头的行:

# awk ‘/^fe/{print}’ /etc/hosts

# awk ‘/^ff/{print}’ /etc/hosts

使用 awk 打印与模式匹配的行

结合元字符 ($) 使用 awk

它将匹配所有以给定模式结尾的行:

# awk ‘/ab$/{print}’ /etc/hosts

# awk ‘/ost$/{print}’ /etc/hosts

# awk ‘/rs$/{print}’ /etc/hosts

使用 awk 打印与模式匹配的字符串

结合转义字符 (\) 使用 awk

它允许你将该转义字符后面的字符作为文字,即理解为其字面的意思。

在下面的例子中,第一个命令打印出文件中的所有行,第二个命令中我想匹配具有 $25.00 的一行,但我并未使用转义字符,因而没有打印出任何内容。

第三个命令是正确的,因为一个这里使用了一个转义字符以转义 $,以将其识别为 ‘$’(而非元字符)。

# awk ‘//{print}’ deals.txt

# awk ‘/$25.00/{print}’ deals.txt

# awk ‘/\$25.00/{print}’ deals.txt

Awk是什么?

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

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

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

awk ‘{pattern + action}’

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

gawk 是 AWK 的 GNU 版本。

一般的UNIX作业系统,本身即附有AWK,不同的UNIX作业系统所附的AWK其版本亦不尽相同,若读者所使用的系统上未附有AWK,可通过 anonymous ftp 到下列地方取得:

phi.sinica.edu.tw:/pub/gnu

ftp.edu.tw:/UNIX/gnu

prep.ai.mit.edu:/pub/gnu

注 解:一种编程语言,因其模式匹配语法而特别有用,通常用于数据检索和数据转换。一个GNU版本称为Gawk。

Awk的调用方式

awk提供了适应多种需要的不同解决方案,它们是:

一、 awk命令行,你可以象使用普通UNIX命令一样使用awk,在命令行中你也可以使用awk程序设计语言,虽然awk支持多行的录入,但是录入长长的命令行并保证其正确无误却是一件令人头疼的事,因此,这种方法一般只用于解决简单的问题。当然,你也可以在shell script程序中引用awk命令行甚至awk程序脚本。

二、使用-f选项调用awk程序。awk允许将一段awk程序写入一个文本文件,然后在awk命令行中用-f选项调用并执行这段程序。具体的方法我们将在后面的awk语法中讲到。

三、利用命令解释器调用awk程序:利用UNIX支持的命令解释器功能,我们可以将一段awk程序写入文本文件,然后在它的第一行加上:

#!/bin/awk -f

并赋予这个文本文件以执行的权限。这样做之后,你就可以在命令行中用类似于下面这样的方式调用并执行这段awk程序了。

awk脚本文本名 待处理文件Awk的语法  与其它UNIX命令一样,awk拥有自己的语法:

awk [ -F re] [parameter…] [‘prog’] [-f progfile]

参数说明:

-F re:允许awk更改其字段分隔符。

parameter: 该参数帮助为不同的变量赋值。

‘prog’: awk的程序语句段。这个语句段必须用单拓号:’和’括起,以防被shell解释。这个程序语句段的标准形式为:

‘pattern ‘

其中pattern参数可以是egrep正则表达式中的任何一个,它可以使用语法/re/再加上一些样式匹配技巧构成。与sed类似,你也可以使用, 分开两样式以选择某个范围。关于匹配的细节,你可以参考附录,如果仍不懂的话,找本UNIX书学学grep和sed(本人是在学习ed时掌握匹配技术的)。 action参数总是被大括号包围,它由一系统awk语句组成,各语句之间用;分隔。awk解释它们,并在pattern给定的样式匹配的记录上执行其操作。与shell类似,你也可以使用#作为注释符,它使#到行尾的内容成为注释,在解释执行时,它们将被忽略。你可以省略pattern和 action之一,但不能两者同时省略,当省略pattern时没有样式匹配,表示对所有行(记录)均执行操作,省略action时执行缺省的操作–在标准输出上显示。

-f progfile:允许awk调用并执行progfile指定有程序文件。progfile是一个文本文件,他必须符合awk的语法。

in_file:awk的输入文件,awk允许对多个输入文件进行处理。值得注意的是awk不修改输入文件。如果未指定输入文件,awk将接受标准输入,并将结果显示在标准输出上。awk支持输入输出重定向。

awk 指令是双引号括起来还是单引号括起来

用单引号,以为使用单引号可以防止awk中的指令被shell扩展,从而让原汁原味的指令传给awk执行

awk怎样把变量作为正则表达式

字符 要么写成~ /bin.*rundb/,如果在awk中使用变量,格式如下: ~/"’$key’"/,fieldname也一样 再就

Shell中的awk

楼上的回答很正确! awk处理文件分记录(行)和域(列),$1指第一列,$2指第二列,依次类推. NR指文件的记录个数即行数. 这应该更明白了吧!