awk初级使用-------shell学习(6)
2010-10-17 16:24
477 查看
awk三种使用方式:
1. awk [-F field-separator] ‘command’ file1 file2 …。field-separator必须用引号或双引号扩上。
2. 将awk指令写入脚本中,并且指定执行该脚本的解析器为“#!/usr/bin/awk -f”,awk路径不同系统可能不一样。运行该脚本:test.awk file1 file2 …。
3. 将awk指令写入脚本中,执行awk –f scripfile file1 file2 …。
awk每次在文件中读一行,找到域分隔符(若未制定-F,则默认为空格),设置其为域n(从1开始,$1,$2…$n,$0代表原文件中的行),直至一新行,然后,划分这一行作为一条记录,接着 awk再次启动下一行读进程。
awk语句语法规则和其它脚本(如js,但是没有其类的功能,而且数组下标从1开始)语言非常类似。另外,可以给命令添加信息头或信息尾,或两者都加,两者中不一定就只是为了输出,可以设置一些值等,它们就是普通语句,只不过执行的位置特殊点。在信息头中可以声明一些变量,从而可以在接下来的执行语句中使用。
注意:
{print $1,$2}会在第一个数据域和第二个数据域中添加OFS(输出域分隔符,awk内置变量会有介绍)。
如果忘了添加文件,那么会默认以标准输入作为内容来源,ctrl+D代表输入内容结束。
为了防止语法错误,应该保证:
command用单引号括起来。
命令内所有引号成对出现。
确保用花括号括起全部动作,用圆括号括起全部条件语句。
条件语句
如果要使用正则,用/regex/形式,“~”表示匹配正则表达式,“!~”表示不匹配正则表达式(如$1 !~ /john/),其它变量比较操作使用>,>=,<,<=,==,!=,数据类型自动匹配。判断时,可以用if(compare),也可以直接compare或(compare),当然我推荐用if(compare),否则对于语法的记忆比较麻烦,容易出错。比较语句使用&&,||,!操作符,用法类似C语言。
awk内置变量
内置字符串函数
字符串都用””括起来,正则用//括起来。
printf用法和C类似,但是不需要加()。如printf “%d/n” a。
可以向awk命令传递值:awk ‘END {print AGE}’ AGE=10 file。
awk,sed,tr支持在匹配特殊字符时可直接使用ctrl+v, ctrl+?来匹配。
awk,tr还支持/X形式来匹配特殊字符。
grep不支持特殊字符查找。
awk -F '/t' 'BEGIN {count=0} {count+=$3} END {print count}' 进行累加
awk '{print "'\"'"}'可用来输入单引号
awk '{print "\""}'可用来输入双引号
1. awk [-F field-separator] ‘command’ file1 file2 …。field-separator必须用引号或双引号扩上。
2. 将awk指令写入脚本中,并且指定执行该脚本的解析器为“#!/usr/bin/awk -f”,awk路径不同系统可能不一样。运行该脚本:test.awk file1 file2 …。
3. 将awk指令写入脚本中,执行awk –f scripfile file1 file2 …。
awk每次在文件中读一行,找到域分隔符(若未制定-F,则默认为空格),设置其为域n(从1开始,$1,$2…$n,$0代表原文件中的行),直至一新行,然后,划分这一行作为一条记录,接着 awk再次启动下一行读进程。
awk语句语法规则和其它脚本(如js,但是没有其类的功能,而且数组下标从1开始)语言非常类似。另外,可以给命令添加信息头或信息尾,或两者都加,两者中不一定就只是为了输出,可以设置一些值等,它们就是普通语句,只不过执行的位置特殊点。在信息头中可以声明一些变量,从而可以在接下来的执行语句中使用。
$ awk –F ‘;’ ‘BEGIN {print “head”} {if($1==0) {$1=1; print $1”/t”$2}; print “nice”} END {print “end”}’ file
注意:
{print $1,$2}会在第一个数据域和第二个数据域中添加OFS(输出域分隔符,awk内置变量会有介绍)。
如果忘了添加文件,那么会默认以标准输入作为内容来源,ctrl+D代表输入内容结束。
为了防止语法错误,应该保证:
command用单引号括起来。
命令内所有引号成对出现。
确保用花括号括起全部动作,用圆括号括起全部条件语句。
条件语句
如果要使用正则,用/regex/形式,“~”表示匹配正则表达式,“!~”表示不匹配正则表达式(如$1 !~ /john/),其它变量比较操作使用>,>=,<,<=,==,!=,数据类型自动匹配。判断时,可以用if(compare),也可以直接compare或(compare),当然我推荐用if(compare),否则对于语法的记忆比较麻烦,容易出错。比较语句使用&&,||,!操作符,用法类似C语言。
awk内置变量
内置字符串函数
字符串都用””括起来,正则用//括起来。
printf用法和C类似,但是不需要加()。如printf “%d/n” a。
可以向awk命令传递值:awk ‘END {print AGE}’ AGE=10 file。
awk,sed,tr支持在匹配特殊字符时可直接使用ctrl+v, ctrl+?来匹配。
awk,tr还支持/X形式来匹配特殊字符。
grep不支持特殊字符查找。
awk -F '/t' 'BEGIN {count=0} {count+=$3} END {print count}' 进行累加
awk '{print "'\"'"}'可用来输入单引号
awk '{print "\""}'可用来输入双引号
相关文章推荐
- shell学习4--awk的基本使用
- sed初级使用-------shell学习(7)
- shell脚本学习:循序渐进之初级awk语句,until循环,test语句
- shell 数组使用,好,留着以后学习
- Shell学习之路-(07-常用命令的使用)
- 关于shell中的正则表达式和awk的使用
- 学习笔记——shell命令(2)AWK
- Linux-Shell脚本编程-学习-5-Shell编程-使用结构化命令-if-then-else-elif
- shell脚本学习-为什么使用 shell 编程
- awk使用详解(shell)
- shell 分析log 使用例子 grep,sed,sort,awk运用
- git学习二:git初级使用教程
- 学习笔记之Shell脚本学习指南 & sed与awk & 正则表达式
- Shell学习:grep, sed, awk命令的练习题
- shell与awk学习复习例子(循环与字符串截取判断)
- [Shell学习笔记] 数组、关联数组和别名使用
- 【Linux】使用sed、awk来完成批量修改配置文件的shell设计
- find和xargs使用-------shell学习(2)
- 使用shell脚本ssh远程执行命令,使用awk时总是报错
- shell学习四十天----awk的惊人表现