首页 > 代码库 > Linux之awk
Linux之awk
一:awk为报告生成器
AWK字段:awk对每行文档按照分隔符把行内的内容切成每个字段。
$0:代表整行。
$1...$N:代表被分割符分开的每个字段。
二:awk基本语法
基本语法:awk [options] ‘program‘ file file ...
awk [options] ‘PATTERN{action}‘ file file ...
输入选项: -F 指定分割符选项。
awk -F : ‘ {print $1 ,$7} ‘ /etc/passwd #指定以冒号作为字段分割符。
PATTERN: awk的输出
print item1, item2, ........
要点:(1) 各项目之间使用逗号分隔,而输出时则使用输出分隔符分隔;(2) 输出的各item可以字符串或数值、当前记录的字段、变量或awk的表达式;数值会被隐式转换为字符串后输 出;(3) print后面item如果省略,相当于print $0输出整串内容;要想后面输出空白,使用pirnt " " (在awk中输出
子串要使用双引号);
awk的变量:内置变量,自定义变量
内置变量:输入时的字段分隔符 (awk的内置变量前要用BEGIN)
FS:Field Seperator, 输入时的字段分隔符
# awk ‘BEGIN{FS=":"}{print $1,$7}‘ /etc/passwd #内置变量的引用要用到双引号
RS:Record Seperator, 输入行分隔符
# awk ‘BEGIN{RS=":"}{print }‘ /etc/passwd #会把冒号分开的内容当作每一行来处理
OFS: Output Field Seperator, 输出时的字段分隔符
# awk ‘BEGIN{FS=":";OFS=":"}{print $1,$7}‘ /etc/passwd #语句与语句之间要用分号分割 (红色部分)
ORS: Outpput Row Seperator, 输出时的行分隔符
NF:Numbers of Field,字段数 #取最后一个字段还可用$NF
NR:Numbers of Record, 行数如果后面跟有多个文件的话那么就是所有文件的一并计数;
# awk ‘BEGIN{FS=":";OFS=":"}{print NR $1,$7}‘ /etc/passwd /etc/group
FNR:行数;各文件分别计数;
# awk ‘BEGIN{FS=":";OFS=":"}{print FNR $1,$7}‘ /etc/passwd
ARGV:数组,保存命令本身这个字符,awk ‘{print $0}‘ 1.txt 2.txt,意味着ARGV[0]保存awk,
# awk ‘BEGIN{print ARGV[0],ARGV[1],ARGV[2],ARGC}‘ /etc/passwd /etc/group
ARGC: 保存awk命令中参数的个数
自定义变量:输入时的字段分隔符 (awk的内置变量前要用BEGIN
-v var_name=VALUE 变量名区分字符大小写
(1) 可以program中定义变量;
(2) 可以命令行中通过-v选项自定义变量;
# awk ‘BEGIN{a="hello awk"}{print a}‘ /etc/passwd
#awk ‘BEGIN{a="hello awk";print a}‘ #可以不跟文件 直接输出hello awk
#awk -v a="hello awk" ‘BEGIN{print a}‘ #直接输出hello awk
awk的printf命令
# awk -F: ‘{printf "%15s %-15s\n",$1,$7}‘ /etc/passwd命令的使用格式:printf format, item1, item2,...
要点:
(1) 要指定format;
(2) 不会自动换行;如需换行则需要给出\n
(3) format用于为后面的每个item指定其输出格式;
format格式的指示符都%开头,后跟一个字符:
%c: 显示字符的ASCII码;
%d, %i: 十进制整数;
%e, %E: 科学计数法显示数值;
%f: 显示浮点数;
%g, %G: 以科学计数法格式或浮点数格式显示数值;
%s: 显示字符串;
%u: 显示无符号整数;
%%: 显示%自身;
修饰符:
#:显示宽度
-:左对齐
+:显示数值的符号
.#: 取值精度
# awk ‘BEGIN {printf "%f\n",3.1415}‘ #显示7个字节
# awk ‘BEGIN {printf "%f\n",3.1415926}‘ #总位数超过8位,小数点后面要进行四舍五入
# awk ‘BEGIN {printf "%15.2f\n",3.1415926}‘ #15.2 表示整体为15个位宽加小数点后两位
awk输出重定向
print items > output-file
print items >> output-file
print items | command
特殊文件描述符:
/dev/stdin: 标准输入
/dev/stdout: 标准输出
/dev/stderr: 错误输出
awk的操作符
算术操作符:
x+y
x-y
x*y
x/y
x**y, x^y
x%y
-x:负值
+x:转换为数值
字符串操作符:连接
赋值操作符:
=
+=
-=
*=
/=
%=
^=
**=
++
--
如果模式自身是=号,要写为/=/
比较操作符:
<
<=
>
>=
==
!=
~:模式匹配,左边的字符串能够被右边的模式所匹配为真,否则为假;
!~:
逻辑操作符:
&&: 与
||:或
条件表达式:
selector?if-true-expression:if-false-expression
# awk -F: ‘{$3>=500?utype="common user":utype="admin or system user";print $1,"is",utype}‘ /etc/passwd
函数调用:
function_name(argu1,argu2)
本文出自 “slayer” 博客,请务必保留此出处http://slayer.blog.51cto.com/4845839/1544885
Linux之awk