1.awk
对付文字处理工作,做一些文本/数据处理,最基本功能是在文件或字符串中基于指定规则浏览和抽取信息.
1. 调用awk
第一种是命令行方式,如:
- awk [-F fs] 'command' file这里,command是真正的awk命令。上面例子中, [-F 域分隔符]是可选的,默认使用空格作为缺省的域分隔符,这样就不用指定这个选项.
fs是指定的分隔符,可以使用字符串或者正则表达式。例如:-F:.
- 第二种方法是将所有awk命令插入一个文件,并使awk程序可执行,然后用awk命令解释器作为脚本的首行,以便通过键入脚本名称来调用它.
- 第三种方式是将所有的awk命令插入一个单独文件,然后调用:
awk -f script_file file
-f选项指明在文件 script _ file中的a w k脚本,file是使用awk进行浏览的文件名.
理解:
第一种是把命令写在处理文件外面,用单引号标注;.
第二种是把命令写在处理文件里面;
第三种是把命令单独写成脚本,然后处理文件;
2.awk脚本
在命令中调用awk时, awk脚本由各种操作和模式组成.
如果设置了-F选项,则awk每次读一条记录或一行,并使用指定的分隔符分隔指定域.
但如果未设置-F选项,awk假定空格为域分隔符,并保持这个设置直到发现一新行
awk读取命令行上所指定的各个文件,一次读取一条记录,找到域分隔符,设置其为域n.
再针对每一行,应用程序指定的命令.
- 模式和动作
任何awk语句都由模式和动作组成.- 模式可以是任何条件语句或复合语句或正则表达式.
模式有两个特殊字段,BEGIN ,END.
BEGIN语句块在awk从输入中读取行之前执行.
这两个都是可选的语句块,变量初始化,打印输出等语句都可以写在里面;- END在awk从输入流读完所有的行之后进行操作.
实际动作在大括号 { }内指明,如果不指明采取动作,awk将打印出所有浏览出来的记录.
动作由一个或多个命令、函数、表达式组成,之间由换行符或分号分开,主要部分是变量赋值,输出命令,内置函数,控制流语句.
模式部分决定动作语句何时触发及触发事件,处理即对数据进行的操作.如果省略模式部分,动作将时刻保持执行状态.
- awk ’BEGIN { print "start" } pattern { command } END {print"end"}' file.
begin end 语句块,通用模式匹配语句块,这些都是可选的.
通用语句块是动作,没有模式部分,动作时刻执行.
- 域和记录
awk执行时,其浏览域标记为$1, $2 . . . $n。这种方法称为域标识。使用这些域标识将更容
易对域进行进一步处理.$0,意即所有域.
- 在碰到 awk错误时,可相应查找:
• 确保整个awk命令用单引号括起来.
• 确保命令内所有引号成对出现.
• 确保用花括号括起动作语句,用圆括号括起条件语句.
• 可能忘记使用花括号,也许你认为没有必要,但 awk不这样认为,将按之解释语法.
3.awk中正则表达式及其操作
awk里正则表达式用斜线括起来,例如/liu/,有点跟perl相似.
元字符的话,awk都可以识别使用.
awk中if后面的条件用()括起来,注意与{}区别,这个是条件表达式.
应用 awk [-F fs]‘command’ file ,多注意括号,引号,其余正常使用正则表达式就行.
awk对域还有好几种操作,参考linux与unix shell,对于域值比较,修改域操作,增加列值,文件长度相加,还挺有帮助的.
awk还有好多字符串函数,更有效的处理文本;需要对文本处理时,可以参考.
awk里正则表达式用法格式:
2.输入输出(echo,read,cat,tee,printf)
- 使用echo命令可以显示文本行或变量,或者把字符串输入到文件。它的一般形式为:
echo string
echo 将各个参数打印到标准输出,并以换行符结束.
-n 不用换行符结束。
-e 允许后面的输出进行转义.
- read从标准输入中读取一行,并把输入行的每个字段的值传递给指定的shell变量.
可以使用read语句从键盘或文件的某一行文本中读入信息,并将其赋给一个变量.如果只指定了一个变量,那么 read将会把所有的输入赋给该变量,直至遇到第一个文件结束符或回车.
它的一般形式为:
read varible1 varible2 ...
eg:read name surname
peng liu
echo $name $ surname
peng liu
如果,变量少于字段个数,那么第一个字段被赋给第一个变量,其余的部分都赋给第二个变量.
- cat
显示文件内容,创建文件.
- tee
tee命令功能可以用字母T表示,功能是把输出的一个副本输送到标准输出,另一个副本拷贝到指定的文件里.
sort file | tee out.txt
- printf
格式化输出,加强版的echo,有各种各样的格式输出.类似与c语言里的printf().
printf函数基本语法是printf( [格式控制符],参数),格式控制字符通常在引号里.
格式控制符: