《awk命令简linux tee 命令详解sed 命令》由会员分享,可在线阅读,更多相关《awk命令简linux tee 命令详解sed 命令(9页珍藏版)》请在金锄头文库上搜索。
1、awk 命令简介,linux tee 命令详解,Sed 命令标签: awk tee sed 2009-04-06 20:18 awk 命令简介在 shell 命令或编程中,可以用 AWK 强大的的文本处理能力。如果要格式化报文或从一个大的文本文件中抽取数据包,那么 awk 可完成这些任务。 awk 是一种解释的编程语言。awk 也是 shell 过滤工具中最难掌握的。awk 是一种自解释的编程语言。结合 awk 和 sed 和grep,将会使 awk 编程更加容易。awk 语言最基本的功能是在文件或字符串中基于指定的规则浏览和抽取信息。有三种方式可调用 awk.命令行方式。.将所有的 awk
2、命令插入一个文件,并利用 chmod 使 awk 文件成为执行。.将所有的 awk 命令插入一个单独文件,然后调用。以下简单介绍 awk 的各种方式,详细请查看相关另外文档在 awk 中有四种概念。1.抽取域2.匹配正则表达式3.比较域4.向 awk 传递参数以下简单介绍:1).保存 awk 输出 : #awk print $0 myfilenewfile2).使用 tee,在输出到文件的同时输出到屏幕(利用管道|)#awk print $0 myfile |tee newfile3).打印报告头,#awk BEGIN print hello,this is Titlen-print $0 n
3、ewfile4).打印信息尾.#awk BEGINprint $0 END end of file. myfile5).匹配,如下若在 myfile 第二列中带有 BROWN,则打印信息#awk if ($2/BROWN/) print $0 myfile6).精确匹配,同上,只是将改为 =7).不匹配,有时要浏览信息并抽取不匹配操作的记录 ,与相反的符号是 !,如下#awk $0 !/BROWN/ myfile8).比较如小于: #awk if ($1则将编辑指令跳至 : label 处执行。w 写资料到它档内。x 交换 hold space 与 pattern space 内容。y 转换(
4、transform) 字元。虽然 , sed 只有上表所述几个拥有基本编辑功能的函数 , 但由指令中位址参数和指令与指令间的配合 , 也能使sed 完成大部份的编辑任务。2.3 执行档案内的编辑指令当执行的指令太多 , 在命令列上撰写起来十分混乱 , 此时 , 可将这些指令整理储存在档案(譬如档名为 script_file )内 , 用选项 -f script_file , 则让 sed 执行 script_file 内的编辑指令。其命令的格示如下 :sed -f script_file 文件档其中 , 执行 script_file 内编辑指令的顺序是由上而下。例如上一节的例子 , 其可改成如
5、下命令:sed -f ysb.scr yel.dat其中 , ysb.scr 档的内容如下 :1,10ds/yellow/black/g另外 , 在命令列上可混合使用选项 -e 与 -f , sed 执行指令顺序依然是由命令列的左到右, 如执行至 -f 後档案内的指令 , 则由上而下执行。2.4 执行多个文件档的编辑在 sed 命令列上 , 一次可执行编辑多个文件档 , 它们跟在编辑指令之後。例如 , 替换white.dat、red.dat、black.dat 档内的 yellow 字串成 blue , 其命令如下:sed -e s/yellow/blue/g white.dat red.da
6、t black.dat上述命令执行时 , sed 依 white.dat、red.dat、black.dat 顺序 , 执行编辑指令 s/yellow/blue/(请参照 section 4.1 ,进行字串的替换。2.5.执行输出的控制在命令列上的选项 -n (解7) 表示输出由编辑指令控制。由前章内容得知 , sed 会 自动的 将资料由pattern space 输送到标准输出档。但藉着选项 -n , 可将 sed 这 自动的 的动作改成 被动的 由它所执行的编辑指令(解8)来决定结果是否输出。由上述可知 , 选项 -n 必须与编辑指令一起配合 , 否则无法获得结果。例如 , 印出 whi
7、te.dat 档内含有 white字串的资料行 , 其命令如下:sed -n -e /white/p white.dat上面命令中 , 选项 -n 与编辑指令 /white/p (参照section4.6) 一起配合控制输出。其中 , 选项 -n 将输出控制权移给编辑指令;/white/p 将资料行中含有 white 字串印出萤幕。#awk $1/.a/ myfile11).或关系匹配,#awk $0/(YELLOW | RED)/ myfile12).与:& ,或:|13).awk 内置变量.要快速查看记录个数,应使用 NR,如:#awk END print NR myfile .以下使用
8、NF变量显示每一条读记录中有多少个域,并在 END 部份 打印输入文件名。#awk print NR,NF,$0 END print FILENAME myfile. 判断并输出 . #awk if(NR0 & $4/BROWN/) print $0 myfile14).可以设置输入域到域变量名。15).域值比较操作。1.在 BEGIN 中给变量名赋值。通常在 BEGIN 部分赋值是很有益的,可以在 awk 表达式进行改动时减少很大麻烦.2.在关系操作中使用实际数值,使用关系操作时必须用括号括起来.#awk if($627) print $0 myfile#awk BEGIN BASELINE
9、=27if ($6BASELINE) print $6 myfile17).修改数据域取值当在 awk 中修改任何域时,重要的一点是实际的文件可修改,改动的是 cache 中的 awk 复本,awk 会在变量 NR 或 NF 中反映出修改的痕迹。#awk if($1=M.TANS)$6=$6-1;print $6 myfile18).修改文本域#awk if($1=J.Troll)($1=J.L.Troll);print $1 myfile19).只显示修改记录#awk if($1=J.Troll)$1=J.L.Troll;print $1 myfile20).创建新的输出域在 awk 中处理
10、数据时,基于各域进行计算的创建新域是个好的习惯。如下示例:#awk BEGINprint Name Scoretif($6$7)$8=$7-$6;print $8 myfile21).增加列值#awk tot+=$6;ENDprint Club Total point. tot myfile22).使用模式打印文件名及其长度,放入变量 tot 中#ls -l | awk/dprint $9 t $5tot+=$5 END print Total KB:tot23).awk 内置的字符串函数24).awk 脚本文件如以上的所述的诸多情况,这里只不过命令放在一个文件中,且该文件必须是!/bin/awk -f ,因为这样才会使这个文件可以自解释。否则将不能作用。为了容易分别,最好将文件带一个扩展名.awk,完成对文件的编写后,再利用 chmod u+x 使文件可以执行。以上只是我在实验中的一些情况,awk 命令功能很强大,大家可以参考其它的一些手册去获得更清楚的说明