当前位置:文档之家› AWK简介

AWK简介

AWK简介
AWK简介

AWK介绍

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作为输入记录的字段分隔符,如果省略该选项,wak使用环境变量IFS的值

②-f filename : 从文件filename中读取awk_script

③-v var=value : 为awk_script设置变量

2) 将awk_script放入脚本文件并以#!/bin/awk -f 作为首行,给予该脚本可执行权限,然后在shell下通过键入该脚本的脚本名调用之。

3) 将所有的awk_script插入一个单独脚本文件,然后调用: awk -f wak脚本文件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读取输入的下一行,继续重

复步骤③和④,这个过程一直持续,直到awk读取到文件尾。

⑥当awk读完所有的输入行后,如果存在END,就执行相应的actions。

4) iput_file可以是多于一个文件的文件列表,awk将按顺序处理列表中的每个文件。

5) 一条awk_cmd的awk_pattern可以省略,省略时不对输入记录进行匹配比较就执行相应的actions。一条awk_cmd的actions 也可以省略,省略时默认的动作为打印当前输入记录(print $0) 。一条awk_cmd中的awk_pattern和actions不能同时省略。

6)BEGIN区块和END区块别位于awk_script的开头和结尾。awk_script中只有END区块或者只有BEGIN区块是被允许的。如果awk_script中只有BEGIN { actions } ,awk不会读取input_file。

7) awk把输入文件的数据读入内存,然后操作内存中的输入数据副本,awk不会修改输入文件的内容。

8) awk的总是输出到标准输出,如果想让awk输出到文件,可以使用重定向。

4.awk_pattern

awk_pattern 模式部分决定actions动作部分何时触发及触发actions。awk_pattern 可以是以下几种类型:

1) 正则表达式用作awk_pattern: /regexp/

①awk中正则表达式匹配操作中经常用到的字符:

\ ^ $ . [] | () * // 通用的regexp元字符

+ : 匹配其前的单个字符一次以上,是awk自有的元字符,不适用于grep或sed 等

? : 匹配其前的单个字符1次或0次,是awk自有的元字符,不适用于grep或sed 等

②举例:

awk '/ *\$0\.[0-9][0-9].*/' input_file

2) 布尔表达式用作awk_pattern,表达式成立时,触发相应的actions执行。

①表达式中可以使用变量(如字段变量$1,$2等)和/regexp/

②布尔表达式中的操作符:

关系操作符: < > <= >= == !=

匹配操作符: value ~ /regexp/ 如果value匹配/regexp/,则返回真

value !~ /regexp/ 如果value不匹配/regexp/,则返回真

举例: awk '$2 > 10 {print "ok"}' input_file

awk '$3 ~ /^d/ {print "ok"}' input_file

③&&(与) 和||(或) 可以连接两个/regexp/或者布尔表达式,构成混合表达式。!(非) 可以用于布尔表达式或者/regexp/之前。

举例: awk '($1 < 10 ) && ($2 > 10) {print "ok"}' input_file

awk '/^d/ || /x$/ {print "ok"}' input_file

④其它表达式用作awk_script,如赋值表达式等

eg: awk '(tot+=$6); END{print "total points :" tot }' input_file // 分号不能省略

awk 'tot+=$6 {print $0} END{print "total points :" tot }' input_file // 与上面等效

5.actions

actions就是对awk读取的记录数据进行的操作。actions由一条或多条语句或者命令组成,语句、命令之间用分号(;)分隔。actions中还可以使用流程控制结构的语句。

1) awk的命令:

①print 参数列表: print可以打印字符串(加双引号)、变量和表达式,是awk最基本的命令。参数列表要用逗号(,)分隔,如果参数间用空格分隔,打印出时参数值之间不会有空格。

②printf ([格式控制符],参数) : 格式化打印命令(函数),语法与C语言的printf 函数类似。

③next : 强迫awk立刻停止处理当前的记录,而开始读取和处理下一条记录。

④nextfile : 强迫awk立刻停止处理当前的输入文件而处理输入文件列表中的下一个文件

⑤exit : 使awk停止执行而跳出。如果有END 存在,awk会去执行END 的actions。

2) awk的语句: awk的语句主要是赋值语句,用来给变量赋值。

①把直接值或一个变量值赋值给变量。如果直接值是字符串要加双引号。

举例: awk 'BEGIN {x=1 ; y=3 ; x=y ; print "x=" x " ; y=" y }'

②把一个表达式的值赋值给变量。表达式一般是数值表达式,也可以是其它表达式。

数值表达式: num1 operator num2

operator可以是: +(加) -(减) *(乘) /(除) %(取模) ^(求幂)

当num1或者num2是字符串而是不是数字时,无论是否加有双引号,awk都视其值为0

条件选择表达式: A?B:C (A为布尔表达式,B和C可以是表达式或者直接值)

当布尔表达式A的值为真时,整个表达式的值为B,A的值为假时,整个表达式的值为C

举例: awk 'BEGIN {x=3 ; x+=2 ; y=x+2 ; print "x=" x " ; y=" y }'

awk 'BEGIN {x=3 ; y=x>4?"ok":4 ; print "x=" x " ; y=" y }'

③为了方便书写,awk也支持C语言语法的赋值操作符: += -= *= /= %= ^= ++ --

3) 流程控制结构(基本上是使用C语言的语法)

其中condition一般为布尔表达式,body和else-body是awk语句块。

①if (condition) {then-body} [else {else-body}]

②while (condition) {body}

③do {body} while (condition)

④for (initialization; condition; increment) {body}

与C语言的for结构的语法相同。

⑤break : 跳出包含它的for、while、do-while 循环

⑥continue : 跳过for、while、do-while循环的body的剩余部分,而立刻进行下一次循环的执行。

6.awk的变量

在awk_script中的表达式中要经常使用变量。不要给变量加双引号,那样做,awk 将视之为字符串。awk的变量基本可以分为两类:

1) awk内部变量: awk的内部变量用于存储awk运行时的各种参数,这些内部变量又可以分为:

①自动内部变量:这些变量的值会随着awk程序的运行而动态的变化,在awk_script中改变这些变量的值是没有意义的(即不应该被赋值)。常见的有:

NF : 当前输入字段的字段数

NR : 对当前输入文件而言,已经被awk读取过的记录(行)的数目。

FNR : 已经被awk读取过的记录(行)的总数目。当输入文件只有一个时,FNR和NR是一致的。

FILENAME : 当前输入文件的文件名。

ARGC : 命令行参数个数。(不包括选项和awk_script,实际就是输入文件的数目加1)

ARGIND : 当前被处理的文件在数组ARGV内的索引( 实际上ARGV[1]就是第一个输入文件)

举例: awk '{print NR,NF,$0} END {print FILENAME}' input_file

②字段变量($0 $1 $2 $3 ...): 当awk把当前输入记录分段时,会对这些字段变量赋值。和内部变量类似,在awk运行过程中字段变量的值是动态变化的。不同的是,修改这些字段变量的值是有意义的,被修改的字段值可以反映到awk的输出中。

可以创建新的输出字段,比如,当前输入记录被分割为8个字段,这时可以通过对变量$9 (或$9之后的字段变量)赋值而增加输出字段,NR的值也将随之变化。字段变量支持变量名替换。

举例: pwd |awk -F/ '{print $NF}' // print $NF 打印输入记录的最后一个字段

awk '{x=2;print $x}' input_file // 打印输入记录的第2个字段

③其它内部变量: 可以修改这些变量。常见的有:

FS : 输入记录的字段分隔符(默认是空格和制表符)

OFS : 输出记录的字段分隔符(默认是空格)

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

RS : 输入记录间的分隔符(默认是NEWLINE)

ORS : 输出记录间的分隔符(默认是NEWLINE)

ARGV : 命令行参数数组

ENVIRON : 存储系统当前环境变量值的数组,它的每个成员的索引就是一个环境变量名,而对应的值就是相应环境变量的值。可以通过给ENVIRON数组的成员赋值而改变环境变量的值,但是新值只在awk_script内有效。eg: ENVIRON["HISTSIZE"]=500

举例: cat /etc/passwd | awk 'BEGIN { FS=":" } {print "User name: "$1,"UID: "$4}' 2) 自定义变量

1) 定义变量: varname=value (自定义变量不需先声明后使用,赋值语句同时完成变量定义和初始化)

2) 在表达式中出现不带双引号的字符串都被视为变量,如果之前未被赋值,默认值为0或空字符串。

3) 向命令行awk程序传递变量的值:

①Usage: awk 'awk_script' awkvar1=value1 awkvar2=value2 .... input_file

eg: awk '{if ($5 < ARG) print $0 }' ARG=100 input_file

②awkvar可以是awk内置变量或自定义变量。

③awkvar的值将在awk开始对输入文件的第一条记录应用awk_script前传入。如果在awk_script中已经对某个变量赋值,那么在命令行上传人到该变量的值就会无效(实际上是awk_script中的赋值语句覆盖了从命令行上传入的值)。

④在awk脚本程序中不能直接使用shell的变量。通过使用下面的语法可达到这样的效果。

awk 'awk_script' awkvar1=shellvar1 awkvar2=shellvar2 .... input_file

eg: awk '{if (v1 == "root") {print "User name is root!"}}' v1=$USER input_file

⑤可以向awk脚本传递变量的值,与上面的类似。

awk_script_file awkvar1=value1 awkvar2=value2 ... input_file

7.awk的内置函数

可以在awk_script的任何地方使用awk函数。和awk变量一样,awk函数可以分为内置函数和自定义函数。

1) 常见awk内置数值函数

int(x) : 求出x 的整数部分,朝向0 的方向做舍去。eg: int(3.9)是3,int(-3.9) 是-3。

sqrt(x) : 求出x 正的平方根值。eg: sqrt(4)=2

exp(x) : 求出x 的次方。eg: exp(2) 即是求e*e 。

log(x) : 求出x 的自然对数。

sin(x) : 求出x 的sine 值,x 是弪度量。

cos(x) : 求出x 的cosine 值,x 是弪度量。

atan2(y,x) : 求y/x 的arctangent 值,所求出的值其单位是弪度量。

rand() : 得到一个随机数(平均分布在0和1之间)。每次执行gawk,rand从相同的seed生成值。

srand(x) : 设定产生随机数的seed为x。如果在第二次运行awk程序时你设定相同的seed值,你将再度得到相同序列的随机数。如果省略引数x,例如srand(),则当前日期时间会被当成seed。这个方法可使得随机数值是真正不可预测的。srand() : 其值是当次awk_script运行过程中前次srand(x)的设定的seed值x,。2) 常见awk内置字符串函数

index(in, find) : 返回字符串in中字符串find第一次出现的位置(索引从1开始),如果在字串in中找不到字符串find,则返回值为0。eg: print index("peanut","an") 会印出3。

length(s) : 求出字符串s的字符个数。eg: length("abcde") 是5。

match(s,r) : 返回模式字符串r在字符串s的第一次出现的位置,如果s不包含r,则返回值0。

sprintf(fmt,exp1,...) : 和printf类似印出,是sprintf不是打印而是返回经fmt格式化后的exp。

eg: sprintf("pi = %.2f (approx.)",22/7) 传回的字串为"pi = 3.14 (approx.)"

sub(p, r,t) : 在字符串t中寻找符合模式字符串p的最靠前最长的位置,并以字符串r代替最前的p。

eg: str = "water, water"sub(/at/, "ith",str) 结果字符串str 会变成"wither, water"

gsub(p, r, t) : gsub与sub类似。不过时在字符串t中以字符串r 代替所有的p。eg: str="water, water" ; gsub(/at/, "ith",str) 结果字符串str会变成"wither,wither" substr(str, st, len) : 传回str的子字符串,其长度为len字符,从str的第st个位置开始。如果len没有出现,则传回的子字符串是从第st个位置开始至结束。eg: substr("washington",5,3) 传回值为"ing"

substr("washington",5) 传回值为"ington"

split(s,a,fs) : 在分隔符fs为分隔符将字符串s分隔成一个awk数组a,并返回a 的下标数。

eg: awk 'BEGIN{print split("123#456#789",myarray,"#")}' 将打印3 。

tolower(str) : 将字符串str的大写字母改为小写字母。

eg: tolower("MiXeD cAsE 123") 传回值为"mixed case 123"

toupper(str) : 将字符串string 的小写字母改为大写字母。

eg: toupper("MiXeD cAsE 123")传回值为"MIXED CASE 123"

3) 常见awk内置系统函数

close(filename) : 将输入或输出的文件filename 关闭。

system(command) : 此函数允许调用操作系统的指令,执行完毕後将回到awk程序。

eg: awk 'BEGIN {system("ls")}'

8 自定义函数

复杂的awk常常可以使用自己定义的函数来简化。调用自定义的函数与调用内置函数的方法一样。

1) 自定义函数定义的格式: 自定义函数可以在awk程序的任何地方定义。function fun_name (parameter_list) { // parameter_list是以逗号分隔的参数列表body-of-function // 函数体,是awk语句块

}

2) 举例:

awk '{ print "sum =",SquareSum($1,$2) }

function SquareSum(x,y) { sum=x*x+y*y ; return sum } ' grade.txt

9.awk的数组

数组使用前,不必预先定义,也不必指定数组元素个数。

1) 访问数组的元素。经常使用循环来访问数组元素,下面是一种循环类型的基本结构:

for (element in array_name ) print array_name[element]

2) 举例: awk 'BEGIN{print split("123#456#789",mya,"#") ; for (i in mya) { print mya[i] }} '

10. 其他(重要)

1) 为了避免碰到awk错误,可以总结出以下规律:

①确保整个awk_script用单引号括起来。

②确保awk_script内所有引号成对出现。

③确保用花括号括起动作语句,用圆括号括起条件语句。

④可能忘记使用花括号,也许你认为没有必要,但awk不这样认为,将按之解

释语法。

⑤如果使用字符串,一定要保证字符串被双引号括起来(在模式中除外)。

2) 在awk中,设置有意义的域名是一种好习惯,在进行模式匹配或关系操作时更容易理解。一般的变量名设置方式为name=$n。(这里name为调用的域变量名,n为实际域号。)

3) 通常在BEGIN部分给一些变量赋值是很有益的,这样可以在awk表达式进行改动时减少很多麻烦。

4) awk的基本功能是根据指定规则抽取输入数据的部分内容并输出,另一个重要的功能是对输入数据进行分析运算得到新的数据并输出,这是通过在awk_script 中对字段变量($1、$2、$3...)从新赋值或使用更大的字段变量$n(n大于当前记录的NF)而实现的。

5) 使用字符串或正则表达式时,有时需要在输出中加入一新行或查询一元字符。这时就需要字符串屏蔽序列。awk中经常使用的屏蔽序列有:

\b 退格键\t tab键\f 走纸换页\ddd 八进制值\n 新行\r 回车键

\c 任意其他特殊字符。eg: \\为反斜线符号

6) awk的输出函数printf,基本上和C语言的语法类似。

①格式: printf ("输出模板字符串",参数列表)

②参数列表是以逗号分隔的列表,参数可以是变量、数字值或字符串。

③输出模板字符串的字符串中必须包含格式控制符,有几个参数就要求有几个格式控制符。模板字符串中可以只有格式控制符而没有其它字符。

④格式控制符: %[-][width][.prec]fmt

% : 标识一个格式控制符的开始,不可省略。

- : 表示参数输出时左对齐,可省略。

width : 一个数字,表示参数输出时占用域的宽度,可省略。

.prec : prec是一个数值,表示最大字符串长度或小数点右边的位数,可省略。fmt : 一个小写字母,表示输出参数的数据类型,不可省略。

⑤常见的fmt :

c ASCII字符

d 整数

e 浮点数,科学记数法

f 浮点数,如123.44

g 由awk决定使用哪种浮点数转换e或f

o 八进制数

s 字符串

x 十六进制数

⑥举例: echo "65" | awk '{ printf ("%c\n",$0) }' // 将打印 A

awk 'BEGIN{printf "%.4f\n",999}' //将打印999.0000

awk 'BEGIN{printf "2 number:%8.4f%8.2f",999,888}' // 将打印 2 number:999.0000 888.000

LINUX awk用法

AWK 尹会生 --2010.9.6注:本文档中的代码和图片均来自《sed与awk(第二版)》

一 编写awk脚本 HELLO,WORLD $ echo 'this line of data is ignored' > test $ awk '{ print "Hello, world" }' test Hello, world test文件只包含一行,因此,print操作只执行一次。 $ cat test2 Hello, world $ awk '{ print }' test2 Hello, world print语句没有参数,只简单输出每个输入行。 $ awk ‘BEGIN {print “hello,World”}’ Hello,World

BEGIN模式不需要等待输入,它在第一个输入行读入之前执行。 awk程序设计模型 awk程序由所谓的主输入(main input)循环组成。一个循环称作一个例程。awk允许你编写两个特殊的例程,他们在任何输入被读取前和所有输入都被读取后执行。他们是与BEGIN和END规则相关的过程。BEGIN和END过程是可选的。 模式匹配 src1.awk # test for integer, string or empty line. /[0-9]+/ { print "That is an integer" } /[A-Za-z]+/ { print "This is a string" } /^$/ { print "This is a blank line." }

一个特殊的例子: $ awk -f awkscr 4T That is an integer This is a string 一行可以匹配一条或多条规则 程序脚本的注释 # 以#号开始的一行 记录和字段 awk假设它的输入是有结构的,而不是一串无规则的字符。默认它将每个输入行作为一条记录,而将由空格或制表符分隔的单词作为字段。连续的多个空格和/或制表符被作为一个分隔符。 John Robinson 666-555-1111 字段的引用和分离 awk允许使用字段操作符$来指定字段。$后面可以跟着一个数字或者一个变量。$1表示第一个字段,$2表示第二个字段,$0表示整个输入记录。 $ awk '{ print $2, $1, $3 }' names Robinson John 666-555-1111

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.doczj.com/doc/2019295174.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 用来统计当前目录下的文件数

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版者除外),获得并安装它,然后你才可以使用它。

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

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

Thizlinux 系统教程 Shell 经典实例

Thizlinux 系统教程Shell 经典实例 ----------------Milo经典小shell 1 列目录树的shell 脚本如下: #!/bin/sh # dtree: Usage: dtree [any directory] dir=${1:-.} (cd $dir; pwd) find $dir -type d -print | sort -f | sed -e "s,^$1,," -e "/^$/d" -e "s,[^/]*/([^/]*)$,`----1," -e "s,[^/]*/,| ,g" 2 while中使用read (file是一个文件) cat file | while read line do echo $line echo " :: Please input any key(s):c" str4read="" while true do chr4read=`dd if=/dev/tty bs=1 count=1 2>/dev/null` str4read=$str4read$chr4read if [ "$chr4read" = "" ] ;then break; fi done echo " :: |$str4read|" done 3 将多个空格替换为字符 sed 's/[ ][ ]*/ /g' 如果空格与tab共存时用 sed -e 's/[[:space:]][[:space:]]*/ /g' filename 4用脚本实现分割文件 #!/bin/bash if [ $# -ne 2 ]; then echo 'Usage: split file size(in bytes)' exit fi file=$1 size=$2 if [ ! -f $file ]; then echo "$file doesn't exist" exit fi #TODO: test if $size is a valid integer filesize=`/bin/ls -l $file | awk '{print $5}'` echo filesize: $filesize let pieces=$filesize/$size let remain=$filesize-$pieces*$size if [ $remain -gt 0 ]; then let pieces=$pieces+1 fi echo pieces: $pieces i=0 while [ $i -lt $pieces ]; do echo split: $file.$i: dd if=$file of=$file.$i bs=$size count=1 skip=$i let i=$i+1 done echo "#!/bin/bash" > merge echo "i=0" >> merge echo "while [ $i -lt $pieces ];" >> merge echo "do" >> merge echo " echo merge: $file.$i" >> merge echo " if [ ! -f $file.$i ]; then" >> merge echo " echo merge: $file.$i missed" >> merge echo " rm -f $file.merged" >> merge echo " exit" >> merge echo " fi" >> merge echo " dd if=$file.$i of=$file.merged bs=$size count=1 seek=$i" >> merge echo " let i=$i+1" >> merge echo "done" >> merge chmod u+x merge' 5得到上月未日期,格式为YYYYMMDD get_lastday_of_lastmonth() { yy=`date +%Y` mm=`date +%m-1|bc` [ $mm -lt 1 ] && mm=12;yy=`expr $yy - 1` aaa=`cal $mm $yy` dd=`echo $aaa|awk '{print $NF}'` echo $yy$mm$dd } print $NF的$NF是打印最后一个列。因为awk的内置变量NF是列的总数,而$NF就代表着最后一列 6 实现用backup或tar命令来做目录备份

linux awk将多个文件结果列合并到一个文件

Linux下awk将多个文件的结果列合并到一个文件在使用NS进行模拟结果数据处理的时候,往往需要对多组参数的结果进行比较来鉴别性能的优劣,这里编写了一个使用awk将多个同类型结果文件进行合并操作的脚本。如,NS模拟结果中,经常出现多个网络参数(协议类型、误码率、带宽、背景流、时延等)取不同值条件下进行一些网络指标(RTT,cwnd,吞吐量、网络利用率、公平性等)统计,这时会产生N 多组实验结果,怎样对这么多组结果中的单个指标(常见的吞吐量)进行比较,如果使用手工粘贴到excel再进行绘图就显得任务量很大,显得人脑子比较笨(当然,最优秀的程序员永远是最懒的,我恰巧也是其中之一)。 小提示:为了方便NS模拟结果直接在excel里面打开,建议结果数据以文本形式(.txt,.dat)保存,各数据列之间用制表符\t(excel默认分隔符),这样在文件上右键-》Excel打开即可,而不用在excel 里面使用数据导入向导设置分隔符这么麻烦。一切以提高生产效率和生活质量为根本出发点O(∩_∩)O~。 这里给出一个awk脚本来实现上面的问题。 test.awk: #!/usr/bin/awk -f BEGIN { #print ARGC; Index[ARGC];#记录各个文件的行下标 for(t=1;t<=ARGC;t++) { Index[t]=0; } } { #文件数ARGC-1,第一个参数是应用程序名awk. for(t=1;t<=ARGC;t++) { if(FILENAME==ARGV[t]) { line[t,Index[t]]=$0;#$0=整行,前提是各个文件行列之间已经被\t制表符分隔。 #line[t,Index[t]]=sprintf("%s\t%s",$1,$2);#如果固定为几列,也可以用这个。 Index[t]++; } } } END { maxcount=0; for(i=1;i<=ARGC;i++) { if(Index[i]>maxcount) maxcount=Index[i]; } #printf("maxcount:%d",maxcount);

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

GAWK入门

GAWK 入门:AWK 语言基础 利用GAWK 的开放源代码实现学习AWK 了解A WK 文本处理和模式扫描语言的基本概念。本教程将带您开始使用A WK 进行编程:您将了解A WK 如何读取输入数据和对其进行排序、如何运行A WK 程序、操作数据并进行复杂的模式匹配。当您完成本教程的学习时,同时也了解了GNU A WK (GA WK)。 开始之前 了解本教程中介绍的内容、如何最好地利用它以及在学习本教程的过程中需要完成哪些工作。 关于本教程 GNU A WK (GAWK) 是历史悠久的A WK 编程语言的开放源代码实现,可用于所有的UNIX? 系统。A WK 语言是一种UNIX 备用工具,它是一种功能强大的文本操作和模式匹配语言,特别适用于进行信息检索,这使得它非常适合用于当今的数据库驱动的应用程序。因为它集成于UNIX 环境,所以可以设计、构建和快速地执行完整的工作程序,并且立即就能得到结果。 本教程为A WK 文本处理语言提供了实践性的介绍。它介绍了如何使用开放源代码GA WK 解释器来编写和执行A WK 程序,以便通过各种方式来搜索和操作数据。 目标 本教程面向那些需要利用A WK 强大的文本操作功能的读者。在本教程中,您将使用GA WK,以了解各种运行A WK 程序的方法。您还将了解如何组织程序,并学习A WK 的记录和字段范例。在完成本教程后,您可以学习到该语言的基本内容,包括格式化输出、记录和字段操作以及模式匹配。您还应该能够编写自定义的A WK 程序,以使用UNIX 命令行执行复杂的文本处理。 先决条件 本教程没有特殊的先决条件,不过您应该熟悉UNIX 命令行Shell 的使用。如果您对 C 编程语言的构造比较熟悉,那么将会很有帮助,但这并不是必需的。 系统要求 您必须在系统中安装GA WK 的工作副本,最好是V ersion 3.0 或更高版本。很容易获得GA WK 的源代码和二进制包。如果您使用源代码安装GA WK,请参考GA WK 源代码分发版中的README 文件,其中列出了进行成功的编译和安装所需的任何附加软件。

awk分隔符学习

3.请执行命令取出linux中eth0的IP地址(请用cut,有能力者也可分别用awk,sed命令答)。 解答: 说明:此题解答方法已经给大家讲解了不下15种,还可以有很多,在这里给大家着重讲下awk的技巧用法,希望大家能多重视老师的思路、思维过程,不过过分关注问题的答案,以便达到学一通十的效果。 方法一【此法为绿叶】:如果用awk来处理的话,一般的同学可能会用下面的办法实现: [root@oldboy ~]# ifconfig eth0|grep 'inet addr'|awk -F ":" '{print $2}'|awk '{print $1}' 10.0.0.162 小结:这个方法是常规方法,很好。但是我们有没有更简单的awk实现方法呢?往下看。 方法二【此法为小红花】:通过awk同时使用多个分隔符来实现: [root@oldboy ~]# ifconfig eth0|grep 'inet addr'|awk -F '[ :]' '{print $13}' 192.168.1.186 提示:本题通过使用空格或冒号来做分隔符,然后一次性取出结果,就是空格或冒号可以看做是同一个分隔符。

小结:这个方法很方便吧,同学们可以多用,选取包含IP 地址行的特殊关键字'inet addr’过滤然后,使用awk以空格和:同时做分隔符,然后取出需要的内容。 本答案的最大缺点就是计算$n的时候很费劲,因为inet 前面有多个空格,查到$13,真是不容易,如此看来从实现时间上可能还不如第一个方法快呢?那好引出我们今天的关键答案案例。 方法三【大红花出场】:通过awk同时使用多个分隔符,然后通过正则匹配多个分隔符的方法来实现: [root@oldboy ~]# ifconfig eth0 |awk -F '[ :]+' 'NR==2 {print $4}' 10.0.0.185 我们来说明下这个简单易用的好办法: 提示:本题NR是行号,分隔符+号匹配,[]里一个或多个任意一个分隔符,这里就是匹配一个或多个冒号或空格。1)awk -F 后面跟分隔符‘[空格:]+’,其中[空格:]多分隔符写法,意思是以空格或冒号做分隔,后面的"+"号是正则表达式,意思是匹配前面空格或冒号,两者之一的1个或1个以上。 2)NR==2和sed -n "2p",相当,意思都是选择第几行,例:[root@oldboy ~]# ifconfig eth0|awk NR==2

ubuntu shell 使用命令大全

ubuntu shell 使用命令大全 前言 下面的命令大都需要在控制台/ 终端/ shell 下输入。 控制台, 终端, 和shell 意味着同样一件事- 一个命令行界面,他可以用来控制系统。 打开一个控制台: 应用程序--> 附件--> 终端 任何一个使用'sudo' 作为前缀的命令都需要拥有管理员(或root) 访问权限。所以你会被提示输入你自己的密码。 安装升级 查看软件xxx安装内容 dpkg -L xxx 查找软件库中的软件 apt-cache search 正则表达式 或 aptitude search 软件包 显示系统安装包的统计信息 apt-cache stats 显示系统全部可用包的名称 apt-cache pkgnames 显示包的信息 apt-cache show k3b 查找文件属于哪个包 apt-file search filename 查看已经安装了哪些包 dpkg -l 查询软件xxx依赖哪些包 apt-cache depends xxx 查询软件xxx被哪些包依赖 apt-cache rdepends xxx 增加一个光盘源 sudo apt-cdrom add 系统升级 sudo apt-get update (这一步更新包列表) sudo apt-get dist-upgrade (这一步安装所有可用更新) 或者 sudo apt-get upgrade (这一步安装应用程序更新,不安装新内核等) 清除所有已删除包的残馀配置文件 dpkg -l |grep ^rc|awk '{print $2}' |sudo xargs dpkg -P 如果报如下错误,证明你的系统中没有残留配置文件了,无须担心。 dpkg: --purge needs at least one package name argument Type dpkg --help for help about installing and deinstalling packages [*]; Use `dselect' or `aptitude' for user-friendly package management; Type dpkg -Dhelp for a list of dpkg debug flag values; Type dpkg --force-help for a list of forcing options; Type dpkg-deb --help for help about manipulating *.deb files; Type dpkg --license for copyright license and lack of warranty (GNU GPL) [*]. Options marked [*] produce a lot of output - pipe it through `less' or `more' ! 编译时缺少h文件的自动处理 sudo auto-apt run ./configure 查看安装软件时下载包的临时存放目录

Linux下使用awk批量删除共享内存

Linux下使用awk批量删除共享内存 1.awk简介 awk 是一个强大的文本分析工具。sed 常常用于一整个行的处理,而awk 则倾向于以空格和tab键为默认分隔符将每行切片成一个个域(也就是一列)来处理。Awk适用于小型的数据数据处理 awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是AWK 的GNU 版本。 2. awk语法格式 a wk 'pattern1 {action1} pattern2 {action2} ...' filename awk 后面接两个单引号并加上大括号{} 来对匹配模式的数据进行处理。awk 可以处理后面指定的文件,也可以通过管道命令”|”读取来自前个命令的标准输出。 3.工作流程 awk工作流程是这样的:读入有'\n'换行符分割的多条记录,然后将每一条记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域。默认域分隔符是空格键和tab键。 以last命令结合awk来演示awk一个简单的筛选输出。 们用last 可以将登陆者的数据取出来,结果如下所示: [root@lvlv]# last -n 4 root pts/1 192.168.1.100 Tue Feb 10 11:21 still logged in root pts/1 192.168.1.100 Tue Feb 10 00:46 - 02:28 (01:41) root pts/1 192.168.1.100 Mon Feb 9 11:41 - 18:30 (06:48) dmtsai pts/1 192.168.1.100 Mon Feb 9 11:41 - 11:41 (00:00) 若我想要取出帐号与登陆者的IP ,且帐号与IP 之间以[tab] 隔开,则会变成这样: [root@lvlv]# last -n 5 | awk '{print $1 "\t" $3}' root 192.168.1.100 root 192.168.1.100 root 192.168.1.100 dmtsai 192.168.1.100 4.利用awk批量删除共享内存 首先利用“ipcs –m”查看共享内存信息,然后再利用“ipcrm -m shmid”删除共享内存。利用awk进行批量删除共享内存的shell脚本如下: ipcs -m|awk '$2~/[0-9]+/{print $2}'| while read s do ipcrm -m $s done 结合上面对awk的介绍,应该不难看懂脚本。awk '$2~/[0-9]+/{print $2}'表示打印出只含阿拉伯数字的每行的第二列,即共享内存标识。awk中正则表达式由两个斜杠包围,即/REG/,

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读取输入的下一行,继续重复步骤③和④,这个过程一

awk正则表达式介绍

awk命令详解 简单使用: awk :对于文件中一行行的独处来执行操作。 awk -F :'{print $1,$4}' :使用‘:’来分割这一行,把这一行的第一第四个域打印出来。 详细介绍: AWK命令介绍 awk语言的最基本功能是在文件或字符串中基于指定规则浏览和抽取信息,awk抽取信息 后,才能进行其他文本操作,完整的awk脚本通常用来格式化文本文件中的信息 1.调用awk: 第一种命令行方式,如: awk [-Field-separator] 'commands' input-file(s) 这里commands是真正的awk命令,[-F域分隔符]是可选的,awk默认使用空格分隔, 因此如果要浏览域间有空格的文本,不必指定这个选项,但如果浏览如passwd文件,此文件 各域使用冒号作为分隔符,则必须使用-F选项: awk -F : 'commands' input-file 第二种,将所有awk命令插入一个文件,并使awk程序可执行,然后用awk命令解释器作为脚 本的首行,以便通过键入脚本名称来调用它 第三种,将所有awk命令插入一个单独文件,然后调用,如: awk -f awk-script-file input-file -f选项指明在文件awk-script-file的awk脚本,input-file是使用awk进行浏览 的文件名 2.awk脚本: awk脚本由各种操作和模式组成,根据分隔符(-F选项),默认为空格,读取的内容依次放置到 对应的域中,一行一行记录读取,直到文件尾 2.1.模式和动作

任何awk语句都是由模式和动作组成,在一个awk脚本中可能有许多语句。模式部分决定动作语句何时触发及触发事件。动作即对数据进行的操作,如果省去模式部分,动作将时刻保持执行状态 模式可以是任何条件语句或复合语句或正则表达式,模式包含两个特殊字段BEGIN和END,使用BEGIN语句设置计数和打印头,BEGIN语句使用在任何文本浏览动作之前,之后文本浏览动作依据输入文件开始执行;END语句用来在awk完成文本浏览动作后打印输出文本总数和结尾状态标志,有动作必须使用{}括起来 实际动作在大括号{}内指明,常用来做打印动作,但是还有更长的代码如if和循环looping 语句及循环退出等,如果不指明采取什么动作,awk默认打印出所有浏览出的记录 2.2.域和记录: awk执行时,其浏览标记为$1,$2...$n,这种方法称为域标记。使用$1,$3表示参照第1和第3域,注意这里使用逗号分隔域,使用$0表示使用所有域。例如: awk '{print $0}' temp.txt > sav.txt 表示打印所有域并把结果重定向到sav.txt中 awk '{print $0}' temp.txt|tee sav.txt 和上例相似,不同的是将在屏幕上显示出来 awk '{print $1,$4}' temp.txt 只打印出第1和第4域 awk 'BEGIN {print "NAME GRADE\n----"} {print $1"\t"$4}' temp.txt 表示打信息头,即输入的内容的第一行前加上"NAME GRADE\n-------------",同时内容以tab分开 awk 'BEGIN {print "being"} {print $1} END {print "end"}' temp 同时打印信息头和信息尾 2.3.条件操作符: <、<=、==、!=、>=、~匹配正则表达式、!~不匹配正则表达式

正则表达式

正则表达式
目录
1. 引言 2. 基本语法 3. sed 4. awk 5. 练习:在 C 语言中使用正则表达式
1. 引言
以前我们用 grep 在一个文件中找出包含某些字符串的行,比如在头文件中找出一个宏定义. 其实 grep 还可以找出符合某个模式(Pattern)的一类字符串.例如找出所有符合 xxxxx@xxxx.xxx 模式的字符串(也就是 email 地址),要求 x 字符可以是字母,数字,下划 线,小数点或减号,email 地址的每一部分可以有一个或多个 x 字符,例如 abc.d@https://www.doczj.com/doc/2019295174.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 页

相关主题
文本预览
相关文档 最新文档