awk 手册

awk是linux下的一个命令,他对其他命令的输出,对文件的处理都十分强大,其实他更像一门编程语言,他可以自定义变量,有条件语句,有循环,有数组,有正则,有函数等。他读取输出,或者文件的方式是一行,一行的读,根据你给出的条件进行查找,并在找出来的行中进行操作,感觉他的设计思想,真的很简单,但是结合实际情况,具体操作起来就没有那么简单了。他有三种形势,awk,gawk,nawk,平时所说的awk其实就是gawk。

选项

-F 紧跟分隔符,表示读入的字段以输入的分隔符分割
-v 进入变量模式 可以进行变量的赋值及调用(调用不需要加 $ 符)

POSIX options:      GNU long options: (standard)
-f progfile         --file=progfile
-F fs               --field-separator=fs
-v var=val          --assign=var=val
Short options:      GNU long options: (extensions)
-b                  --characters-as-bytes
-c                  --traditional
-C                  --copyright
-d[file]            --dump-variables[=file]
-e 'program-text'   --source='program-text'
-E file             --exec=file
-g                  --gen-pot
-h                  --help
-L [fatal]          --lint[=fatal]
-n                  --non-decimal-data
-N                  --use-lc-numeric
-O                  --optimize
-p[file]            --profile[=file]
-P                  --posix
-r                  --re-interval
-S                  --sandbox
-t                  --lint-old
-V                  --version

变量

变量          描述
$n           当前记录的第n个字段,字段间由 FS分隔。
$0           完整的输入记录。
FS           字段分隔符(默认是任何空格)。
RS           记录分隔符(默认是一个换行符)。
NF           当前记录中的字段数。(分隔符隔开的代表一个字段)
NR           当前记录数。
OFS          输出字段分隔符(默认值是一个空格)。
ORS          输出记录分隔符(默认值是一个换行符)。
OFMT         数字的输出格式(默认值是%.6g)。
FNR/NR       但相对于当前文件。
ARGC         命 令行参数的数目。
ARGV         包 含命令行参数的数组。
ERRNO        最后一个系统错误的描述。
ARGIND       命令行中当前文件的位置(从0开始算)。
RSTART       由match函数所匹配的字符串的第一个位置。
SUBSEP       数组下标分隔符(默认值是\034)。
CONVFMT      数字转换格式(默认值为%.6g)
ENVIRON      环 境变量关联数组。
RLENGTH      由match函数所匹配的字符串的长度。
FILENAME     当前文件名。
IGNORECASE   如果为真,则进行忽略大小写的匹配。
FIELDWIDTHS  字段宽度列表(用空格键分隔)。

运算符

运算符                      描述
= += -= *= /= %= ^= **=    赋值
?:                         C条件表达式
||                         逻辑或
&&                         逻辑与
~ ~!                       匹配正则表达式和不匹配正则表达式
< <= > >= != ==            关系运算符
空格                        连接
+ -                        加,减
* / &                      乘,除与求余
+ - !                      一元加,减和逻辑非
^ ***                      求幂
++ --                      增加或减少,作为前缀或后缀
$                          字段引用
in                         数组成员

awk的正则

匹配符   描述
\Y      匹配一个单词开头或者末尾的空字符串
\B      匹配单词内的空字符串
\<      匹配一个单词的开头的空字符串,锚定开始
\>      匹配一个单词的末尾的空字符串,锚定末尾
\W      匹配一个非字母数字组成的单词
\w      匹配一个字母数字组成的单词
\'      匹配字符串末尾的一个空字符串
\‘      匹配字符串开头的一个空字符串

字符串函数

函数名       描述
sub         匹配记录中最大、最靠左边的子字符串的正则表达式,并用替换字符串替换这些字符串。如果没有指定目标字符串就默认使用整个记录。替换只发生在第一次匹配的 时候
gsub        整个文档中进行匹配
index       返回子字符串第一次被匹配的位置,偏移量从位置1开始
substr      返回从位置1开始的子字符串,如果指定长度超过实际长度,就返回整个字符串
split       可按给定的分隔符把字符串分割为一个数组。如果分隔符没提供,则按当前FS值进行分割
length      返回记录的字符数
match       返回在字符串中正则表达式位置的索引,如果找不到指定的正则表达式则返回0。match函数会设置内建变量RSTART为字符串中子字符串的开始位 置,RLENGTH为到子字符串末尾的字符个数。substr可利于这些变量来截取字符串
toupper 和 tolower   可用于字符串大小间的转换,该功能只在gawk中有效

数学函数

函数名           返回值
atan2(x,y) y,x  范围内的余切
cos(x)          余弦函数
exp(x)          求幂
int(x)          取整
log(x)          自然对数
rand()          随机数
sin(x)          正弦
sqrt(x)         平方根
srand(x)        x是rand()函数的种子
int(x)          取整,过程没有舍入
rand()          产生一个大于等于0而小于1的随机数

format 的使用

要点

  1. 其与print命令的最大不同是,printf需要指定format;
  2. format用于指定后面的每个item的输出格式;
  3. printf语句不会自动打印换行符;\n

format格式的指示符都以%开头,后跟一个字符;如下

%c:     显示字符的ASCII码;
%f:     显示浮点数;
%g,     %G: 以科学计数法的格式或浮点数的格式显示数值;
%s:     显示字符串;
%u:     无符号整数;
%%:     显示%自身;
%d, %i:十进制整数;
%e, %E:科学计数法显示数值;

修饰符

N: 显示宽度;
-: 左对齐;
+:显示数值符号;

原文链接:http://linux.51yip.com/search...

阅读 152

推荐阅读