AWK命令说明

AWK命令说明
AWK命令说明

AWK命令Table of Contents:

1. awk简介

2. awk命令格式和选项

2.1. awk的语法有两种形式

2.2. 命令选项

3. 模式和操作

3.1. 模式

3.2. 操作

4. awk的环境变量

5. awk运算符

6. 记录和域

6.1. 记录

6.2. 域

6.3. 域分隔符

7. gawk专用正则表达式元字符

8. POSIX字符集

9. 匹配操作符(~)

10. 比较表达式

11. 范围模板

12. 一个验证passwd文件有效性的例子

13. 几个实例

14. awk编程

14.1. 变量

14.2. BEGIN模块

14.3. END模块

14.4. 重定向和管道

14.5. 条件语句

14.6. 循环

14.7. 数组

14.8. awk的内建函数

15. How-to

1. awk简介:

awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk的处理文本和数据的方式是这样的,它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。如果没有指定处理动作,则把匹配的行显示到标准输出(屏幕),如果没有指定模式,则所有被操作所指定的行都被处理。awk分别代表其作者姓氏的第一个字母。因为它的作者是三个人,分别是Alfred Aho、Brian Kernighan、Peter Weinberger。gawk是awk的GNU版本,它提供了Bell实验室和GNU的一些扩展。下面介绍的awk是以GUN的gawk为例的,在linux系统中已把awk链接到gawk,所以下面全部以awk 进行介绍。

2. awk命令格式和选项:

2.1. awk的语法有两种形式:

awk [options] 'script' var=value file(s)

awk [options] -f scriptfile var=value file(s)

2.2. 命令选项:

-F fs or --field-separator fs

指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:。

-v var=value or --asign var=value

赋值一个用户定义变量。

-f scripfile or --file scriptfile

从脚本文件中读取awk命令。

-mf nnn and -mr nnn

对nnn值设置内在限制,-mf选项限制分配给nnn的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。

-W compact or --compat, -W traditional or --traditional

在兼容模式下运行awk。所以gawk的行为和标准的awk完全一样,所有的awk扩展都被忽略。

-W copyleft or --copyleft, -W copyright or --copyright

打印简短的版权信息。

-W help or --help, -W usage or --usage

打印全部awk选项和每个选项的简短说明。

-W lint or --lint

打印不能向传统unix平台移植的结构的警告。

-W lint-old or --lint-old

打印关于不能向传统unix平台移植的结构的警告。

-W posix

打开兼容模式。但有以下限制,不识别:\x、函数关键字、func、换码序列以及当fs是一个空格时,将新行作为一个域分隔符;操作符**和**=不能代替^和^=;fflush无效。

-W re-interval or --re-inerval

允许间隔正则表达式的使用,参考(grep中的Posix字符类),如括号表达式[[:alpha:]]。

-W source program-text or --source program-text

使用program-text作为源代码,可与-f命令混用。

-W version or --version

打印bug报告信息的版本。

3. 模式和操作:

awk脚本是由模式和操作组成的:

pattern {action} 如$ awk '/root/' test,或$ awk '$3 < 100' test。

两者是可选的,如果没有模式,则action应用到全部记录,如果没有action,则输出匹配全部记录。默认情况下,每一个输入行都是一条记录,但用户可通过RS变量指定不同的分隔符进行分隔。

3.1. 模式:

模式可以是以下任意一个:

/正则表达式/:使用通配符的扩展集。

关系表达式:可以用下面运算符表中的关系运算符进行操作,可以是字符串或数字的比较,如$2>%1选择第二个字段比第一个字段长的行。

模式匹配表达式:用运算符~(匹配)和~!(不匹配)。

模式,模式:指定一个行的范围。该语法不能包括BEGIN和END模式。

BEGIN:让用户指定在第一条输入记录被处理之前所发生的动作,通常可在这里设置全局变量。

END:让用户在最后一条输入记录被读取之后发生的动作。

3.2. 操作:

操作由一个或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内。主要有四

部份。

●变量或数组赋值

●输出命令

●内置函数

●控制流命令

4. awk的环境变量:

Table 1. awk的环境变量

变量描述

$n 当前记录的第n个字段,字段间由FS分隔。$0 完整的输入记录。

ARGC 命令行参数的数目。

ARGIND 命令行中当前文件的位置(从0开始算)。ARGV 包含命令行参数的数组。

CONVFMT 数字转换格式(默认值为%.6g) ENVIRON 环境变量关联数组。

ERRNO 最后一个系统错误的描述。FIELDWIDTHS 字段宽度列表(用空格键分隔)。FILENAME 当前文件名。

FNR 同NR,但相对于当前文件。

FS 字段分隔符(默认是任何空格)。

IGNORECASE 如果为真,则进行忽略大小写的匹配。NF 当前记录中的字段数。

NR 当前记录数。

OFMT 数字的输出格式(默认值是%.6g)。

OFS 输出字段分隔符(默认值是一个空格)。

ORS 输出记录分隔符(默认值是一个换行符)。RLENGTH 由match函数所匹配的字符串的长度。

RS 记录分隔符(默认是一个换行符)。

RSTART 由match函数所匹配的字符串的第一个位置。SUBSEP 数组下标分隔符(默认值是\034)。

5. awk运算符

Table 2. 运算符

运算符描述

= += -= *= /= %= ^= **= 赋值

?: C条件表达式

|| 逻辑或

&& 逻辑与

~ ~! 匹配正则表达式和不匹配正则表达式

< <= > >= != == 关系运算符

空格连接

+ - 加,减

* / & 乘,除与求余

+ - ! 一元加,减和逻辑非

^ *** 求幂

++ -- 增加或减少,作为前缀或后缀

$ 字段引用

in 数组成员

6. 记录和域

6.1. 记录

awk把每一个以换行符结束的行称为一个记录。

记录分隔符:默认的输入和输出的分隔符都是回车,保存在内建变量ORS和RS中。

$0变量:它指的是整条记录。如$ awk '{print $0}' test将输出test文件中的所有记录。

变量NR:一个计数器,每处理完一条记录,NR的值就增加1。如$ awk '{print NR,$0}' test将输出test 文件中所有记录,并在记录前显示记录号。

6.2. 域

记录中每个单词称做“域”,默认情况下以空格或tab分隔。awk可跟踪域的个数,并在内建变量NF中保存该值。如$ awk '{print $1,$3}' test将打印test文件中第一和第三个以空格分开的列(域)。

6.3. 域分隔符

内建变量FS保存输入域分隔符的值,默认是空格或tab。我们可以通过-F命令行选项修改FS的值。如$ awk -F: '{print $1,$5}' test将打印以冒号为分隔符的第一,第五列的内容。

可以同时使用多个域分隔符,这时应该把分隔符写成放到方括号中,如$awk -F'[:\t]' '{print $1,$3}' test,表示以空格、冒号和tab作为分隔符。

输出域的分隔符默认是一个空格,保存在OFS中。如$ awk -F: '{print $1,$5}' test,$1和$5间的逗号就是OFS的值。

7. gawk专用正则表达式元字符

一般通用的元字符集就不讲了,可参考我的Sed和Grep学习笔记。以下几个是gawk专用的,不适合unix 版本的awk。

\Y

匹配一个单词开头或者末尾的空字符串。

\B

匹配单词内的空字符串。

\<

匹配一个单词的开头的空字符串,锚定开始。

\>

匹配一个单词的末尾的空字符串,锚定末尾。

\w

匹配一个字母数字组成的单词。

\W

匹配一个非字母数字组成的单词。

\‘

匹配字符串开头的一个空字符串。

\'

匹配字符串末尾的一个空字符串。

8. POSIX字符集

可参考我的Grep学习笔记

9. 匹配操作符(~)

用来在记录或者域内匹配正则表达式。如$ awk '$1 ~/^root/' test将显示test文件第一列中以root开头的行。

10. 比较表达式

conditional expression1 ? expression2: expression3,例如:$ awk '{max = {$1 > $3} ? $1: $3: print max}' test。如果第一个域大于第三个域,$1就赋值给max,否则$3就赋值给max。

$ awk '$1 + $2 < 100' test。如果第一和第二个域相加大于100,则打印这些行。

$ awk '$1 > 5 && $2 < 10' test,如果第一个域大于5,并且第二个域小于10,则打印这些行。

11. 范围模板

范围模板匹配从第一个模板的第一次出现到第二个模板的第一次出现之间所有行。如果有一个模板没出现,则匹配到开头或末尾。如$ awk '/root/,/mysql/' test将显示root第一次出现到mysql第一次出现之间的所有行。

12. 一个验证passwd文件有效性的例子

$ cat /etc/passwd | awk -F: '\

NF != 7{\

printf("line %d,does not have 7 fields:%s\n",NR,$0)}\

$1 !~ /[A-Za-z0-9]/{printf("line %d,non alpha and numeric user id:%d: %s\n,NR,$0)}\

$2 == "*" {printf("line %d, no password: %s\n",NR,$0)}'

cat把结果输出给awk,awk把域之间的分隔符设为冒号。

如果域的数量(NF)不等于7,就执行下面的程序。

printf打印字符串"line ?? does not have 7 fields",并显示该条记录。

如果第一个域没有包含任何字母和数字,printf打印“no alpha and numeric user id" ,并显示记录数和记录。

如果第二个域是一个星号,就打印字符串“no passwd”,紧跟着显示记录数和记录本身。

13. 几个实例

$ awk '/^(no|so)/' test-----打印所有以模式no或so开头的行。

$ awk '/^[ns]/{print $1}' test-----如果记录以n或s开头,就打印这个记录。

$ awk '$1 ~/[0-9][0-9]$/(print $1}' test-----如果第一个域以两个数字结束就打印这个记录。

$ awk '$1 == 100 || $2 < 50' test-----如果第一个或等于100或者第二个域小于50,则打印该行。

$ awk '$1 != 10' test-----如果第一个域不等于10就打印该行。

$ awk '/test/{print $1 + 10}' test-----如果记录包含正则表达式test,则第一个域加10并打印出来。

$ awk '{print ($1 > 5 ? "ok "$1: "error"$1)}' test-----如果第一个域大于5则打印问号后面的表达式值,否则打印冒号后面的表达式值。

$ awk '/^root/,/^mysql/' test----打印以正则表达式root开头的记录到以正则表达式mysql开头的记录范围内的所有记录。如果找到一个新的正则表达式root开头的记录,则继续打印直到下一个以正则表达式mysql 开头的记录为止,或到文件末尾。

14. awk编程

14.1. 变量

在awk中,变量不需要定义就可以直接使用,变量类型可以是数字或字符串。

赋值格式:Variable = expression,如$ awk '$1 ~/test/{count = $2 + $3; print count}' test,上式的作用是,awk 先扫描第一个域,一旦test匹配,就把第二个域的值加上第三个域的值,并把结果赋值给变量count,最后打印出来。

awk可以在命令行中给变量赋值,然后将这个变量传输给awk脚本。如$ awk -F: -f awkscript month=4

year=2004 test,上式的month和year都是自定义变量,分别被赋值为4和2004。在awk脚本中,这些变量使用起来就象是在脚本中建立的一样。注意,如果参数前面出现test,那么在BEGIN语句中的变量就不能被使用。

域变量也可被赋值和修改,如$ awk '{$2 = 100 + $1; print }' test,上式表示,如果第二个域不存在,awk将计算表达式100加$1的值,并将其赋值给$2,如果第二个域存在,则用表达式的值覆盖$2原来的值。再例如:$ awk '$1 == "root"{$1 ="test";print}' test,如果第一个域的值是“root”,则把它赋值为“test”,注意,字符串一定要用双引号。

内建变量的使用。变量列表在前面已列出,现在举个例子说明一下。$ awk -F: '{IGNORECASE=1; $1 == "MARY"{print NR,$1,$2,$NF}'test,把IGNORECASE设为1代表忽略大小写,打印第一个域是mary的记录数、第一个域、第二个域和最后一个域。

14.2. BEGIN模块

BEGIN模块后紧跟着动作块,这个动作块在awk处理任何输入文件之前执行。所以它可以在没有任何输入的情况下进行测试。它通常用来改变内建变量的值,如OFS,RS和FS等,以及打印标题。如:$ awk 'BEGIN{FS=":"; OFS="\t"; ORS="\n\n"}{print $1,$2,$3} test。上式表示,在处理输入文件以前,域分隔符(FS)被设为冒号,输出文件分隔符(OFS)被设置为制表符,输出记录分隔符(ORS)被设置为两个换行符。$ awk 'BEGIN{print "TITLE TEST"}只打印标题。

14.3. END模块

END不匹配任何的输入文件,但是执行动作块中的所有动作,它在整个输入文件处理完成后被执行。如

$ awk 'END{print "The number of records is" NR}' test,上式将打印所有被处理的记录数。

14.4. 重定向和管道

awk可使用shell的重定向符进行重定向输出,如:$ awk '$1 = 100 {print $1 > "output_file" }' test。上式表示如果第一个域的值等于100,则把它输出到output_file中。也可以用>>来重定向输出,但不清空文件,只做追加操作。

输出重定向需用到getline函数。getline从标准输入、管道或者当前正在处理的文件之外的其他输入文件获得输入。它负责从输入获得下一行的内容,并给NF,NR和FNR等内建变量赋值。如果得到一条记录,getline函数返回1,如果到达文件的末尾就返回0,如果出现错误,例如打开文件失败,就返回-1。如:

$ awk 'BEGIN{ "date" | getline d; print d}' test。执行linux的date命令,并通过管道输出给getline,然后再把输出赋值给自定义变量d,并打印它。

$ awk 'BEGIN{"date" | getline d; split(d,mon); print mon[2]}' test。执行shell的date命令,并通过管道输出给getline,然后getline从管道中读取并将输入赋值给d,split函数把变量d转化成数组mon,然后打印数组mon的第二个元素。

$ awk 'BEGIN{while( "ls" | getline) print}',命令ls的输出传递给geline作为输入,循环使getline从ls的输出中读取一行,并把它打印到屏幕。这里没有输入文件,因为BEGIN块在打开输入文件前执行,所以可以忽略输入文件。

$ awk 'BEGIN{printf "What is your name?"; getline name < "/dev/tty" } $1 ~name {print "Found" name on line ", NR "."} END{print "See you," name "."} test。在屏幕上打印”What is your name?",并等待用户应答。当一行输入完毕后,getline函数从终端接收该行输入,并把它储存在自定义变量name中。如果第一个域匹配变量name的值,print函数就被执行,END块打印See you和name的值。

$ awk 'BEGIN{while (getline < "/etc/passwd" > 0) lc++; print lc}'。awk将逐行读取文件/etc/passwd的内容,在到达文件末尾前,计数器lc一直增加,当到末尾时,打印lc的值。注意,如果文件不存在,getline返回-1,如果到达文件的末尾就返回0,如果读到一行,就返回1,所以命令while (getline < "/etc/passwd")在文件不存在的情况下将陷入无限循环,因为返回-1表示逻辑真。

可以在awk中打开一个管道,且同一时刻只能有一个管道存在。通过close()可关闭管道。如:$ awk '{print $1, $2 | "sort" }' test END {close("sort")}。awd把print语句的输出通过管道作为linux命令sort的输入,END 块执行关闭管道操作。

system函数可以在awk中执行linux的命令。如:$ awk 'BEGIN{system("clear")'。

fflush函数用以刷新输出缓冲区,如果没有参数,就刷新标准输出的缓冲区,如果以空字符串为参数,如fflush(""),则刷新所有文件和管道的输出缓冲区。

14.5. 条件语句

awk中的条件语句是从C语言中借鉴过来的,可控制程序的流程。

14.5.1. if语句

格式:

{if (expression){

statement; statement; ...

}

}

$ awk '{if ($1 <$2) print $2 "too high"}' test。如果第一个域小于第二个域则打印。

$ awk '{if ($1 < $2) {count++; print "ok"}}' test.如果第一个域小于第二个域,则count加一,并打印ok。

14.5.2. if/else语句,用于双重判断。

格式:

{if (expression){

statement; statement; ...

}

else{

statement; statement; ...

}

}

$ awk '{if ($1 > 100) print $1 "bad" ; else print "ok"}' test。如果$1大于100则打印$1 bad,否则打印ok。$ awk '{if ($1 > 100){ count++; print $1} else {count--; print $2}' test。如果$1大于100,则count加一,并

打印$1,否则count减一,并打印$1。

14.5.3. if/else else if语句,用于多重判断。

格式:

{if (expression){

statement; statement; ...

}

else if (expression){

statement; statement; ...

}

else if (expression){

statement; statement; ...

}

else {

statement; statement; ...

}

}

14.6. 循环

awk有三种循环:while循环;for循环;special for循环。

$ awk '{ i = 1; while ( i <= NF ) { print NF,$i; i++}}' test。变量的初始值为1,若i小于可等于NF(记录中域的个数),则执行打印语句,且i增加1。直到i的值大于NF.

$ awk '{for (i = 1; i

breadkcontinue语句。break用于在满足条件的情况下跳出循环;continue用于在满足条件的情况下忽略后面的语句,直接返回循环的顶端。如:

{for ( x=3; x<=NF; x++)

if ($x<0){print "Bottomed out!"; break}}

{for ( x=3; x<=NF; x++)

if ($x==0){print "Get next item"; continue}}

next语句从输入文件中读取一行,然后从头开始执行awk脚本。如:

{if ($1 ~/test/){next}

else {print}

}

exit语句用于结束awk程序,但不会略过END块。退出状态为0代表成功,非零值表示出错。

14.7. 数组

awk中的数组的下标可以是数字和字母,称为关联数组。

AIX系统基本命令

AIX系统基本命令 mkdir:用于创建目录 $ mkdir oracle $ ls oracle $ rm:用于删除文件或目录(rm –r 删除目录时目录内有内容,用-r一起删除)$ rm -r oracle $ ls $ mv:用于改变文件或目录名 $ mkdir ll $ ls ll $ mkdir kk $ ls kk ll $ mv ll kk $ ls kk $ cd kk $ ls ll $ cd:用于进入系统某一级目录中去 $ cd / $ pwd / $ cd /home/oracle $ pwd /home/oracle $ ls 功能:显示目录中的内容,列出当前目录中所有文件的文件名 参数说明: a:列出目录中所有文件 d:列出所有子目录 l:列出长格式文件信息 举例: ls –a:列出当前目录中的所有文件 $ ls -a #UNTITLED# .dt createdbscripts oracle . .dtprofile dead_letter smit.log .. .profile ll smit.script .TTauthority .sh_history make.log websm.log .Xauthority afiedt.buf mbox websm.script $ ls –l:显示文件的详细信息 $ ls -l

-rw------- 1 201 dba 11174 Sep 17 09:15 err*.log drwxr-xr-x 3 201 dba 512 Sep 22 10:21 tra*.log -rw-r--r-- 1 201 dba 8971 Sep 20 11:08 smit.log -rw-r--r-- 1 201 dba 5437 Sep 20 11:08 smit.script -rw-r--r-- 1 201 system 1682 Sep 02 15:18 websm.log -rw-r--r-- 1 201 system 21441 Sep 02 15:10 websm.script (还有ls –rtl,ls –lt 等相关类似命令) $ date 功能:显示当前日期和时间,超级用户可以进行修改 举例:$ date Mon Sep 22 11:22:33 BEIST 2013 $ wc 功能:计算文件中的行数、字数和字符数 参数说明: c:计算字符数 l:计算行数 w:计算字数 举例: # wc profile 13 53 381 profile | | | 行数字数字符数 $ wc smit.log 422 1162 8971 smit.log $ who 功能:列出当前系统注册的用户 举例:$who am i-- 列出当前系统使用者身份 $ who oracle lft0 Sep 22 09:05 oracle pts/0 Sep 22 10:17 (192.168.100.79) oracle pts/4 Sep 22 09:05 (:0.0) $ who am i oracle pts/0 Sep 22 10:17 (192.168.100.79) $ finger 显示当前登陆到系统中的用户的信息 举例: # finger Login Name TTY Idle When Site I nfo oracle ??? *l0 2:02 Mon 09:05 oracle ??? p4 1:59 Mon 09:05 root ??? p0 Mon 11:06 # finger oracle

wc详解

wc命令参数及用法详解 wc命令的功能为统计指定文件中的字节数、字数、行数,并将统计结果显示输出。 语法:wc [选项] 文件... 说明:该命令统计指定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所指定文件的总统计数。下面让我们来简单的看一下其支持的参数及其代表的含义。 参数及含义 举例 demo.txt Welcome to https://www.360docs.net/doc/9a13995582.html, 欢迎来到这里 wc -cwl demo.txt #2 4 39 demo.txt 顺序依次是l w c 强调 这里面大家要注意一点。m和c参数是不能共存的,只有一个可以起作用,看哪个参数在后面。例如: wc -c demo.txt #39 demo.txt wc -m demo.txt #33 demo.txt wc -cml demo.txt #2 33 demo.txt wc -cm demo.txt #33 demo.txt 结果为m的值哦

举一反三 需要把一个文件的行数存在另一个文件里。可是这个wc还会同时输出文件名。咋办?简单,用管道处理一下OK啦 wc -l demo.txt | awk 'BEGIN{FS=" "}{print $1}' 这样,我们就把想要的文件行数给取到了,至于存在另一个文件里,我们可以把awk的print结果重定向到文件。 重要提示 用wc处理文件的时候,一定要在文件末尾存在换行符,否则统计的行数是不正确的。当然多几个换行符是没有问题的。 echo "UNIX" | wc -l # 1 echo -n "UNIX" | wc -l # 0 echo "UNIX\n\n\n" | wc -l # 1 今天看到的命令是:ls -l | wc -l 用来统计当前目录下的文件数

员工转正申请书范文【三篇】

员工转正申请书范文【三篇】 尊敬的领导: 您好! XXX员工XXX,于20XX年XX月XX日加入公司,根据公司的需要,当前担任XXX一职,主要负责XXXX工作。本人做事具有较强的责任心 和进取心,对人热情,热爱现从事的人事工作。从我参加工作到现在,已有将近七个年头,所以,在之前的工作中,锻炼了我不惧怕困难与 团队合作的精神。但来到XXXX,这里的工作与环境又是一个新的开始,在领导的严格要求下,我的工作得到了提升,在同事的协助下,我的 工作得以顺利展开。现将这段时间的工作情况简要总结如下: 1、初到公司时,本人仅仅从公司简介以及同事们的口述中了解公司,对公司的理解仅仅是皮毛的话,那么随着时间的推移,我对公司 也有了更为深刻的了解。从一开始对工作的没有压力,到逐渐的感到 肩上的责任性,在这其中,我持续的学习与请教,就好比一辆新车, 在与公司的持续的实行磨合。到当前为止,这项工作我基本上能够掌握,但是我知道还有很多地方需要改善,还能够做得更好,我相信, 我也有那个信心,随意时间的推移,我会从这份工作中得到成长,同 时我也会把这份工作做得更加完善。 2、在本部门的工作中,我勤奋工作,获得了本部门领导和同事的 认同。当然,在工作中我也出现了一些小的差错和问题,部门领导也 即时给我指出,促动了我工作的成熟性。跟本部门的同事相处中也非 常融洽,有什么问题大家也都能够齐心协心,相互协助,所以,来到 这里,让我有种宾至如归的感觉,我相信,在一个团结协作的团队, 一定会是个强大的团队,所以,我为自己能加入这个团队感到荣幸与 骄傲。 3、在公司的领导下,我会更加严格要求自己,在作好本职工作的 同时,积极团结同事,任何事情沟通都是第一位的。在工作中,要持

awk命令

什么是awk? 你可能对UNIX比较熟悉,但你可能对awk很陌生,这一点也不奇怪,的确,与其优秀的功能相比,awk还远没达到它应有的知名度。awk是什么?与其它大多数UNIX命令不同的是,从名字上看,我们不可能知道awk的功能:它既不是具有独立意义的英文单词,也不是几个相关单词的缩写。事实上,awk是三个人名的缩写,他们是:Aho、(Peter)Weinberg 和(Brain)Kernighan。正是这三个人创造了awk---一个优秀的样式扫描与处理工具。 AWK的功能是什么?与sed和grep很相似,awk是一种样式扫描与处理工具。但其功能却大大强于sed和grep。awk提供了极其强大的功能:它几乎可以完成grep和sed所能完成的全部工作,同时,它还可以可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。它具备了一个完整的语言所应具有的几乎所有精美特性。实际上,awk 的确拥有自己的语言:awk程序设计语言,awk的三位创建者已将它正式定义为:样式扫描和处理语言。 为什么使用awk? 即使如此,你也许仍然会问,我为什么要使用awk? 使用awk的第一个理由是基于文本的样式扫描和处理是我们经常做的工作,awk所做的工作有些象数据库,但与数据库不同的是,它处理的是文本文件,这些文件没有专门的存储格式,普通的人们就能编辑、阅读、理解和处理它们。而数据库文件往往具有特殊的存储格式,这使得它们必须用数据库处理程序来处理它们。既然这种类似于数据库的处理工作我们经常会遇到,我们就应当找到处理它们的简便易行的方法,UNIX有很多这方面的工具,例如sed 、grep、sort以及find等等,awk是其中十分优秀的一种。 使用awk的第二个理由是awk是一个简单的工具,当然这是相对于其强大的功能来说的。的确,UNIX有许多优秀的工具,例如UNIX天然的开发工具C语言及其延续C++就非常的优秀。但相对于它们来说,awk完成同样的功能要方便和简捷得多。这首先是因为awk提供了适应多种需要的解决方案:从解决简单问题的awk命令行到复杂而精巧的awk程序设计语言,这样做的好处是,你可以不必用复杂的方法去解决本来很简单的问题。例如,你可以用一个命令行解决简单的问题,而C不行,即使一个再简单的程序,C语言也必须经过编写、编译的全过程。其次,awk本身是解释执行的,这就使得awk程序不必经过编译的过程,同时,这也使得它与shell script程序能够很好的契合。最后,awk本身较C语言简单,虽然awk吸收了C语言很多优秀的成分,熟悉C语言会对学习awk有很大的帮助,但awk 本身不须要会使用C语言——一种功能强大但需要大量时间学习才能掌握其技巧的开发工具。 使用awk的第三个理由是awk是一个容易获得的工具。与C和C++语言不同,awk只有一个文件(/bin/awk),而且几乎每个版本的UNIX都提供各自版本的awk,你完全不必费心去想如何获得awk。但C语言却不是这样,虽然C语言是UNIX天然的开发工具,但这个开发工具却是单独发行的,换言之,你必须为你的UNIX版本的C语言开发工具单独付费(当然使用D版者除外),获得并安装它,然后你才可以使用它。

ls -l命令详解

有几个字段老是记不住,就记载这里吧 ls -l 列表信息详解 我们平时用ls -l 命令查看一个目录下的文件和子目录的详悉信息时,会得到一个详细的文件和目录名列表.这个列表包含了文件的属性,所属用户,所属组,创建时间,文件大小等等信息.这些信息到底是什么意思呢?有很多初学者对这些不太了解,因此想详悉讲解一下用ls -l命令得到的文件列表每一个字段的意思 以笔者电脑的/root目录为例: [root@gucuiwen root]# ll 总用量 4055 -rw-r--r-- 1 root root 1581 11月 24 18:14 anaconda-ks.cfg drwxr-xr-x 2 root root 208 12月 1 13:50 babylinux -rw-r--r-- 1 root root 1474560 11月 25 15:02 babylinux.img -rw-r--r-- 1 root root 26829 11月 25 15:10 babylinux.png lrwxrwxrwx 1 root root 9 1月 4 11:06 disk1.link.png -> disk1.png -rw-r--r-- 1 root root 3209 11月 26 12:07 disk1.png -rw-r--r-- 1 root root 692 11月 26 13:16 disk2.png -rw-r--r-- 1 root root 718 11月 26 13:30 disk3.png drwx------ 8 root root 392 1月 4 08:40 evolution -rwxr-xr-x 1 root root 13695 11月 30 16:51 fangkuai.sh drwxr-xr-x 2 root root 208 12月 28 12:06 FreeBSD -rw-r--r-- 1 root root 2315 11月 25 17:19 getMBR.png brw-r----- 1 root root 3, 1 1月 4 11:06 hda1 drwxr-xr-x 2 root root 296 12月 31 11:53 htmls -rw-r--r-- 1 root root 21369 11月 24 18:12 install.log -rw-r--r-- 1 root root 3024 11月 24 18:12 install.log.syslog -rw-r--r-- 1 root root 293 1月 4 10:51 ls.txt -rw-r--r-- 1 root root 2237702 11月 25 15:09 magick.miff -rw-r--r-- 1 root root 13493 11月 25 17:31 mbr1.png -rw-r--r-- 1 root root 8123 11月 25 17:42 mbr2.png -rw-r--r-- 1 root root 512 11月 30 16:10 mbr.dat -rw-r--r-- 1 root root 64512 11月 26 15:33 partition.doc -rw-r--r-- 1 root root 49887 11月 26 15:32 partition.sxw -rw-r--r-- 1 root root 1541 12月 18 13:14 passwd -rw-r--r-- 1 root root 46320 11月 25 17:28 Screenshot-1.png -rw-r--r-- 1 root root 44145 11月 25 17:32 Screenshot-2.png -rw-r--r-- 1 root root 43732 11月 25 17:13 Screenshot.png drwxr-xr-x 3 root root 72 1月 4 10:49 test -rw-r--r-- 1 root root 0 12月 18 10:44 tset crw-r----- 1 root root 4, 65 1月 4 11:08 ttyS1

Linux awk命令详解

Linux awk命令详解 AWK介绍 0.awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk。 1.awk语言的最基本功能是在文件或字符串中基于指定规则来分解抽取信息,也可以基于指定的规则来输出数据。完整的awk脚本通常用来格式化文本文件中的信息。 2.三种方式调用awk 1) awk [opion] 'awk_script' input_file1 [input_file2 ...] awk的常用选项option有; ① -F fs : 使用fs作为输入记录的字段分隔符,如果省略该选项,awk使用环境变量IFS的值 ② -f filename : 从文件filename中读取awk_script ③ -v var=value : 为awk_script设置变量 2) 将awk_script放入脚本文件并以#!/bin/awk -f 作为首行,给予该脚本可执行权限,然后在shell下通过键入该脚本的脚本名调用之。 3) 将所有的awk_script插入一个单独脚本文件,然后调用: awk -f awk脚本文件input_file(s) 3. awk的运行过程 1) awk_script的组成: ① awk_script可以由一条或多条awk_cmd组成,两条awk_cmd之间一般以NEWLINE分隔 ② awk_cmd由两部分组成: awk_pattern { actions } ③ awk_script可以被分成多行书写,必须确保整个awk_script被单引号括起来。 2) awk命令的一般形式: awk ' BEGIN { actions } awk_pattern1 { actions } ............ awk_patternN { actions } END { actions } ' inputfile 其中BEGIN { actions } 和END { actions } 是可选的。 3) awk的运行过程: ①如果BEGIN 区块存在,awk执行它指定的actions。 ② awk从输入文件中读取一行,称为一条输入记录。(如果输入文件省略,将从标准输入读取) ③awk将读入的记录分割成字段,将第1个字段放入变量$1中,第2个字段放入$2,以此类推。$0表示整条记录。字段分隔符使用shell环境变量IFS或由参数指定。 ④把当前输入记录依次与每一个awk_cmd中awk_pattern比较,看是否匹配,如果相匹配,就执行对应的actions。如果不匹配,就跳过对应的actions,直到比较完所有的awk_cmd。 ⑤当一条输入记录比较了所有的awk_cmd后,awk读取输入的下一行,继续重复步骤③和④,这个过程一

正则表达式

正则表达式
目录
1. 引言 2. 基本语法 3. sed 4. awk 5. 练习:在 C 语言中使用正则表达式
1. 引言
以前我们用 grep 在一个文件中找出包含某些字符串的行,比如在头文件中找出一个宏定义. 其实 grep 还可以找出符合某个模式(Pattern)的一类字符串.例如找出所有符合 xxxxx@xxxx.xxx 模式的字符串(也就是 email 地址),要求 x 字符可以是字母,数字,下划 线,小数点或减号,email 地址的每一部分可以有一个或多个 x 字符,例如 abc.d@https://www.360docs.net/doc/9a13995582.html,, 1_2@987-6.54,当然符合这个模式的不全是合法的 email 地址,但至少可以做一次初步筛选, 筛掉 a.b,c@d 等肯定不是 email 地址的字符串.再比如,找出所有符合 yyy.yyy.yyy.yyy 模 式的字符串(也就是 IP 地址),要求 y 是 0-9 的数字,IP 地址的每一部分可以有 1-3 个 y 字 符. 如果要用 grep 查找一个模式,如何表示这个模式,这一类字符串,而不是一个特定的字符串 呢?从这两个简单的例子可以看出,要表示一个模式至少应该包含以下信息: 字符类(Character Class):如上例的 x 和 y,它们在模式中表示一个字符,但是取 值范围是一类字符中的任意一个. 数量限定符(Quantifier): 邮件地址的每一部分可以有一个或多个 x 字符,IP 地址 的每一部分可以有 1-3 个 y 字符 各种字符类以及普通字符之间的位置关系:例如邮件地址分三部分,用普通字符@和. 隔开,IP 地址分四部分,用.隔开,每一部分都可以用字符类和数量限定符描述.为 了表示位置关系,还有位置限定符(Anchor)的概念,将在下面介绍.
规定一些特殊语法表示字符类,数量限定符和位置关系,然后用这些特殊语法和普通字符一 起表示一个模式,这就是正则表达式(Regular Expression).例如 email 地址的正则表达式 可以写成[a-zA-Z0-9_.-]+@[a-zA-Z0-9_.-]+\.[a-zA-Z0-9_.-]+,IP 地址的正则表达式可以 写成[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}.下一节介绍正则表达式的语法, 我们先看看正则表达式在 grep 中怎么用.例如有这样一个文本文件 testfile:
192.168.1.1
第 1 页 共 10 页

Linux awk命令使用详解

Linux awk命令使用详解 简单介绍一下,awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大,这是我们玩linux的必备基本功,若要对其身世有更详尽的了解,自行搜索即可。对于工具的知识,笔者尽量将每个知识点的简要说明,并给出实例。 简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。 用法: awk [options] 'scripts' file1,file2... awk [options] 'pattern {action}' file1,file2... options是awk的支持的选项,譬如-F -v等; scripts是其处理脚本,包含模式pattern和动作action(模式和动作的关系一般为,模式负责确定有效字段,动作负责对其处理) 一、print的简单使用

创建一个简单的测试文件如下: [root@mos download]# cat demo.txt Welcome to mos blog. This is a test file. 例:打印整行: $0 [root@mos download]# awk '{print $0}' demo.txt Welcome to mos blog. This is a test file. 例:打印每行的最后一个字段: $NF [root@mos download]# awk '{print $NF}' demo.txt blog. file. 例:打印第二个字段: $2 [root@mos download]# awk '{print $2}' demo.txt to is 例:打印每行的倒数第二个字段,并在其后打印OK

CentOS自动化运维常用命令-学习笔记

否则打开vim编辑器。 5. id tom &>/dev/null && echo "Hi tom" || echo "No such user" 如果id tom 执行成功,则说明用户存在,屏幕将显示Hi,tom 否则显示No such.. 3.3.3作业控制技巧: # vim & # jobs # fg 1 通过fg<编号>的形式将进程再次调回到前台执行; 3.3.4 花括号{}的使用技巧: # echo {a,b,c} 通过花括号扩展可以生成命令行或脚本所需要的字串 # echo user{1,5,8} # user1 user5 user8 # echo {0..10} #1 2 ..10 # echo {0..10 ..2} # 0 2 4..10 # echo a{2..-1} #a2 a1 ..a-1 # mkdir /tmp/dir{1..5} #ls -ld /tmp/dir{1,2,3} #chmod 777 /tmp/dir{1,2} #kill -9 {4603,8345,11574,12257} 3.4变量 3.4.1自定义变量: 建议统一使用大写或者首字母大写。默认NAME的值是可以被修改的,但可以通过typeset 为这个变量添加只读属性来防止误操作,如果需要限定变量值可以设置为整数,亦可以用typeset添加属性; NAME=tomcat echo $NAME typeset -r NAME #添加readonly只读属性 declare INT_NUMBER #预先定义一个变量,但是暂时不给赋值

typeset -in INT_NUMBER #设置整数变量 read P_NUMBER #回车后输入要赋值给P_NUMBER的值echo $P_NUMBER read -p "Please input a number:"P_NUMBER # set #查看当前系统中设置的所有的变量和值 unset P_NUMBER #删除变量; 3.4.2 变量的使用范围 使用name=[value]的形式定义的变量默认仅在当前shell 中有效,子进程不会集成这样的变量.使用export 命令会将变量放入环境中,这样的进程会从父进程哪里继承环境,export 可以直接定义环境变量并赋值. TEST=pass echo $TEST bash #在当前shell下开启新进程bash echo $TEST #查看变量值为空 exit export TEST #将已有用户变量添加至环境 export NAME=tom # 直接定义环境变量 3.4.3 环境变量 Bash预设定了很多环境变量,可以直接调用这些变量; Bash手册: BASHPID 当前bash进程的进程号 GROUPS 当前用户所属的组ID号 HOSTNAME 当前主机的主机名称 PWD 当前工作目录 OLDPWD 前一个工作目录 RANDOM 0 - 32767之间的随机数 UID 当前用户的ID号码 HISTSIZE 命令历史的记录条数 HOME 当前用户的家目录

linux下cat命令详解1

cat命令的用途是连接文件或标准输入并打印。这个命令常用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用 1.命令格式: cat [选项] [文件]... 2.命令功能: cat主要有三大功能: 1.一次显示整个文件:cat filename 2.从键盘创建一个文件:cat > filename 只能创建新文件,不能编辑已有文件. 3.将几个文件合并为一个文件:cat file1 file2 > file 3.命令参数: -A, --show-all 等价于-vET -b, --number-nonblank 对非空输出行编号 -e 等价于-vE -E, --show-ends 在每行结束处显示$ -n, --number 对输出的所有行编号,由1开始对所有输出的行数编号 -s, --squeeze-blank 有连续两行以上的空白行,就代换为一行的空白行 -t 与-vT 等价 -T, --show-tabs 将跳格字符显示为^I -u (被忽略) -v, --show-nonprinting 使用^ 和M- 引用,除了LFD 和TAB 之外 4.使用实例: 实例一:把log2012.log 的文件内容加上行号后输入log2013.log 这个文件里 命令: cat -n log2012.log log2013.log 输出: 代码如下: [root@localhost test]# cat log2012.log 2012-01 2012-02 ======[root@localhost test]# cat log2013.log 2013-01 2013-02

script_start

#!/bin/csh setenv GENESIS_EXPOSE_MODE YES 参见0203.pdf第二章环境变量的说明。作用在于为了方便运行于某些X终端上 # Define correct temp. dir. depending on env. vars.定义临时目录,随环境变量而变 if ($?GENESIS_TMP) then set TMP = $GENESIS_TMP else if ($?GENESIS_DIR) then set TMP = $GENESIS_DIR/tmp else set TMP = D:/genesis/tmp endif # Detect current operating system.提取当前操作系统 set CURR_OS = `uname -s` uname –s 为UNIX/Linux命令,用来取得当前操作系统的名称 # Set the INFO alias and the tmp INFO file. 设置INFO临时文件和INFO的别名命令DO_INFO set IFILE = $TMP/do_info.$$ $$为脚本运行随机产生的唯一的进程号,作用在于不会与其他文件名同名 alias DO_INFO 'COM info,out_file=$IFILE,write_mode=replace,args= \!:* ; source $IFILE; rm $IFILE' 作用在于用DO_INFO替代繁杂的info命令过程,info命令为Genesis提供的提取相关信息的指令,比如提取拼版数据等Info命令参见0204.pdf第六章

AIX常用命令

AIX常用命令 目录操作 命令名功能描述使用举例 mkdir 创建一个目录mkdir dirname rmdir 删除一个目录rmdir dirname mvdir 移动或重命名一个目录mvdir dir1 dir2 cd 改变当前目录cd dirname pwd 显示当前目录的路径名pwd ls 显示当前目录的内容ls -la dircmp 比较两个目录的内容dircmp dir1 dir2 文件操作 命令名功能描述使用举例 cat 显示或连接文件cat filename pg 分页格式化显示文件内容pg filename more 分屏显示文件内容more filename od 显示非文本文件的内容od -c filename cp 复制文件或目录cp file1 file2 rm 删除文件或目录rm filename mv 改变文件名或所在目录mv file1 file2 ln 联接文件ln -s file1 file2

find 使用匹配表达式查找文件find . -name "*.c" -print file 显示文件类型file filename 选择操作 命令名功能描述使用举例 head 显示文件的最初几行head -20 filename tail 显示文件的最后几行tail -15 filename cut 显示文件每行中的某些域cut -f1,7 -d: /etc/passwd colrm 从标准输入中删除若干列colrm 8 20 file2 paste 横向连接文件paste file1 file2 diff 比较并显示两个文件的差异diff file1 file2 sed 非交互方式流编辑器sed "s/red/green/g" filename grep 在文件中按模式查找grep "^[a-zA-Z]" filename awk 在文件中查找并处理模式awk '{print $1 $1}' filename sort 排序或归并文件sort -d -f -u file1 uniq 去掉文件中的重复行uniq file1 file2 comm 显示两有序文件的公共和非公共行comm file1 file2 wc 统计文件的字符数、词数和行数wc filename nl 给文件加上行号nl file1 >file2 安全操作 命令名功能描述使用举例

Shell中的grep、awk和sed的常用命令和语法

常用的grep选项有: -c 只输出匹配行的计数。 -i 不区分大小写(只适用于单字符)。 -h 查询多文件时不显示文件名。 -l 查询多文件时只输出包含匹配字符的文件名。 -n 显示匹配行及行号。 -s 不显示不存在或无匹配文本的错误信息。 -v 显示不包含匹配文本的所有行。 $ grep“sort”*.doc ( #在当前目录下所有. d o c文件中查找字符串”s o r t”) $ grep “sort it” * (#或在所有文件中查询单词”sort it”) 2.行匹配 $ grep -c “48″ data.f $ 4 (#g r e p返回数字4,意义是有4行包含字符串”4 8″。) $ grep “48″ data.f (#显示包含”4 8″字符串的4行文本) 7. 查询空行,查询以某个条件开头或者结尾的行。 结合使用^和$可查询空行。使用- n参数显示实际行数 [root@mypc oid2000]# grep -n “^$” 111.txt (返回结果 2: #说明第二行是空行) [root@mypc oid2000]# grep -n “^abc” 111.txt (#查询以abc开头的行) [root@mypc oid2000]# grep -n “abc$” 111.txt (#查询以abc结尾的行) 8. 匹配特殊字符,查询有特殊含义的字符,诸如$ . ‘ ” * [] ^ | \ + ? ,必须在特定字符前加\。 [root@mypc oid2000]# grep “\.” 111.txt (#在111.txt中查询包含”.”的所有行) [root@mypc oid2000]# grep “my\.conf” 111.txt (#查询有文件名my. c o n f的行) 9. 目录的查询 [root@mypc oid2000]# ls -l |grep “^d” (#如果要查询目录列表中的目录) [root@mypc oid2000]# ls -l |grep “^d[d]“ (#在一个目录中查询不包含目录的所有文件) [root@mypc]# ls -l |grpe “^d…..x..x” (#查询其他用户和用户组成员有可执行权限的目录集合) Awk的常用命令语法 awk [-F filed-s eparator] “commands” input-file(s) [ - F域分隔符]是可选的,a w k使用空格作为缺省的域分隔符 1.2保存a w k输出 $ awk ‘{print $0}’ input-files > out-files (#重定向保存输出) $ awk ‘{print $0}’ input-files | tee out-files (#使用t e e命令,输出到文件的同时输出到屏幕) 1.3 常用的awk命令举例 [root@mypc /]# awk ‘$0 ~ /user/’ /etc/passwd (#如果某域含有user就将该行打

awk命令详解

常用awk命令(转)

awk 用法:awk ' pattern {action} ' 变量名含义 ARGC 命令行变元个数 ARGV 命令行变元数组 FILENAME 当前输入文件名 FNR 当前文件中的记录号 FS 输入域分隔符,默认为一个空格 RS 输入记录分隔符 NF 当前记录里域个数 NR 到目前为止记录数 OFS 输出域分隔符 ORS 输出记录分隔符 1、awk '/101/' file 显示文件file中包含101的匹配行。 awk '/101/,/105/' file awk '$1 == 5' file awk '$1 == "CT"' file 注意必须带双引号 awk '$1 * $2 >100 ' file awk '$2 >5 && $2<=15' file 2、awk '{print NR,NF,$1,$NF,}' file 显示文件file的当前记录号、域数和每一行的第一个和最后一个域。 awk '/101/ {print $1,$2 + 10}' file 显示文件file的匹配行的第一、二个域加10。 awk '/101/ {print $1$2}' file awk '/101/ {print $1 $2}' file 显示文件file的匹配行的第一、二个域,但显示时域中间没有分隔符。 3、df | awk '$4>1000000 ' 通过管道符获得输入,如:显示第4个域满足条件的行。 4、awk -F "|" '{print $1}' file 按照新的分隔符“|”进行操作。 awk 'BEGIN { FS="[: \t|]" } {print $1,$2,$3}' file 通过设置输入分隔符(FS="[: \t|]")修改输入

linux中grep命令详解

grep用法详解:grep与正则表达式 首先要记住的是: 正则表达式与通配符不一样,它们表示的含义并不相同! 正则表达式只是一种表示法,只要工具支持这种表示法,那么该工具就可以处理正则表达式的字符串。vi grep ,awk ,sed 等都支持正则表达式. 1基础正则表达式 grep 工具,以前介绍过。 grep -[acinv] '搜索内容串' filename -a 以文本文件方式搜索 -c 计算找到的符合行的次数 -i 忽略大小写 -n 顺便输出行号 -v 反向选择,即找没有搜索字符串的行 其中搜索串可以是正则表达式! 1 搜索有the的行,并输出行号 $grep -n 'the' regular_express.txt 搜索没有the的行,并输出行号 $grep -nv 'the' regular_express.txt

2 利用[]搜索集合字符 [] 表示其中的某一个字符,例如[ade] 表示a或d或e woody@xiaoc:~/tmp$ grep -n 't[ae]st' regular_express.txt 8:I can't finish the test. 9:Oh! the soup tast e good! 可以用^符号做[]内的前缀,表示除[]内的字符之外的字符。 比如搜索oo前没有g的字符串所在的行. 使用 '[^g]oo' 作搜索字符串 woody@xiaoc:~/tmp$ grep -n '[^g]oo' regular_express.txt 2:apple is my favorite foo d. 3:Foo tball game is not use feet only. 18:google is the best too ls for search keyword. 19:go ooo oogle yes! [] 内可以用范围表示,比如[a-z] 表示小写字母,[0-9] 表示0~9的数字, [A-Z] 则是大写字母们。[a-zA-Z0-9]表示所有数字与英文字符。当然也可以配合^来排除字符。 搜索包含数字的行 woody@xiaoc:~/tmp$ grep -n '[0-9]' regular_express.txt 5:However ,this dress is about $ 3183 dollars.

Shell中的grep awk和sed的常用命令和语法

Shell中的grep、awk和sed的常用命令和语法 Shell中的grep、awk和sed的常用命令和语法 ——oid2000收集整理 Grep的常用命令语法 1. 双引号引用和单引号引用 在g r e p命令中输入字符串参数时,最好将其用双引号括起来。例如:―m y s t r i n g‖。这样做有两个原因,一是以防被误解为s h e l l命令,二是可以用来查找多个单词组成的字符串,例如:―jet plane‖,如果不用双引号将其括起来,那么单词p l a n e将被误认为是一个文件,查询结果将返回―文件不存在‖的错误信息。 在调用变量时,也应该使用双引号,诸如:g r e p―$ M Y VA R‖文件名,如果不这样,将 没有返回结果。 在调用模式匹配时,应使用单引号.[root@mypc ]# echo `grep 123 111.txt` (#注意是反单引号) 2. 常用的g r e p选项有: -c 只输出匹配行的计数。 -i 不区分大小写(只适用于单字符)。 -h 查询多文件时不显示文件名。 -l 查询多文件时只输出包含匹配字符的文件名。 -n 显示匹配行及行号。 -s 不显示不存在或无匹配文本的错误信息。 -v 显示不包含匹配文本的所有行。 3. 特殊的——在多个文件中进行查询 $ grep "sort"*.doc ( #在当前目录下所有. d o c文件中查找字符串―s o r t‖)

$ grep "sort it" * (#或在所有文件中查询单词―sort it‖) 接下来的所有示例是指在单个文件中进行查询 4. 行匹配 $ grep -c "48" data.f $ 4 (#g r e p返回数字4,意义是有4行包含字符串―4 8‖。) $ grep "48" data.f (#显示包含―4 8‖字符串的4行文本) 5. 显示满足匹配模式的所有行行数: [root@mypc oid2000]# grep -n 1234 111.txt 1:1234 3:1234ab 6. 精确匹配 [root@mypc oid2000]# grep "1234\>" 111.txt 1234 7. 查询空行,查询以某个条件开头或者结尾的行。 结合使用^和$可查询空行。使用- n参数显示实际行数 [root@mypc oid2000]# grep -n "^$" 111.txt (返回结果2: #说明第二行是空行) [root@mypc oid2000]# grep -n "^abc" 111.txt (#查询以abc开头的行) [root@mypc oid2000]# grep -n "abc$" 111.txt (#查询以abc结尾的行) 8. 匹配特殊字符,查询有特殊含义的字符,诸如$ . ' " * [] ^ | \ + ? ,必须在特定字符前加\。[root@mypc oid2000]# grep "\." 111.txt (#在111.txt中查询包含―.‖的所有行) [root@mypc oid2000]# grep "my\.conf" 111.txt (#查询有文件名my. c o n f的行) 9. 目录的查询 [root@mypc oid2000]# ls –l |grep ―^d‖ (#如果要查询目录列表中的目录) [root@mypc oid2000]# ls –l |grep ―^d[d]‖(#在一个目录中查询不包含目录的所有文件) [root@mypc]# ls –l |grpe ―^d…..x..x‖ (#查询其他用户和用户组成员有可执行权限的目录集合) 10.排除自身

awk调用shell命令

awk调用shell命令 在awk内部可利用管道和getline函数来调用shell命令,并可得到返回的具体结果,进行相应处理。例子如下: 1) { while ( ("ls" | getline) >0 ) print } 输出当前目录下的所有文件,并打印到标准输出上。| 是管道,getline依次得到每一行的输出,赋值给$0,print打印到标准输出上 2) 如果希望将输出赋值到另外一个变量中,而不是覆盖$0,可这样改写: { while ( ("ls" | getline name) >0 ) print name } 3) system命令可以把awk内部的变量传递到外面使用,比如: { system("echo ", $1) } 打印$1的内容 getline为awk所提供的输入指令. 其语法如下: 语法由何处读取数据数据读入后置于 getline var< file 所指定的file 变量var(var省略时,表示置于$0) getline var pipe 变量变量var(var省略时,表示置于$0) getline一次读取一行数据, 若读取成功则return 1, 若读取失败则return -1, 若遇到文件结束(EOF), 则return 0; 本程序使用getline所return 的数据来做为while 判断循环停止的条件,某些awk版本较旧,并不容许使用者改变$0 之值. 这种版的awk执行本程序时会产生Error, 读者可于getline 之后置上一个变量(如此, getline读进来的数据便不会被置于$0 ), 或直接改用gawk便可解决. awk提供与UNIX 用法近似的pipe, 其记号亦为"|". 其用法及含意如下: awk程序中可接受下列两种语法: [a. 语法] awk output 指令| "Shell 接受的命令" ( 如: print $1,$2 | "sort -k 1" ) [b. 语法] "Shell 接受的命令" | awk input 指令 ( 如: "ls " | getline) 注: awk input 指令只有getline一个. awk output 指令有print, printf() 二个.

相关主题
相关文档
最新文档