awk命令:
Linux文本处理三剑客:grep sed awk
awk gawk: 报表生成器,格式化文本输出
基本用法:
gawk [options] 'program' file file ...
其中program格式为: PATTERN{ACTION_STATEMENT},ACTION_STATEMENT由语句组成,语句分隔符是;
其中ACTION包含: print, printf
# awk -F: '$3>50{print $0}' /etc/passwd 输出uid大于50的行
选项:
-F[]:指明输入字段分隔符; 不使用-F时默认以空格为字段分隔符
gawk -F: '{print $1,$3}' /etc/passwd
gawk -F: '{print $1,$3,"user"}' /etc/passwd
-v var=var 给变量赋值
1、awk的输出命令print
print item1, item2, ...
要点:
(1) 各item间使用逗号分隔,而输出时则使用输出分隔符分隔;
(2)输出的各item可以字符串或数值、当前记录的字段($n)、变量或awk的表达式;数值会被隐式转换为字符进行输出;
(3) print后面的item如果省略,相当于print $0; 输出“空白”,使用print "";
2、变量
2.1 内置变量
FS: input field seperator(输入时的字段分隔符),默认为空白字符;
gawk -v FS=":" '{print $1,$3}' /etc/passwd
RS:input record separator(输入时文件的换行符), 默认为换行符;
awk -v RS=" " '{print $0}' /etc/passwd
OFS: output field seperator(输出时的字段分割符),默认为空白字符;
ORS:output record separator(输出时文件换行符), 默认为换行符;
NF: number of field in current record,字段数;
awk '{print NF}' /etc/passwd 输出字段个数
awk '{print $NF}' /etc/passwd 输出最后一个字段
NR:行数,所有文件统一计数;
awk '{print NR}' /etc/passwd /etc/issue
awk '{print NR,$0}' /etc/passwd /etc/issue 在每一行前加上行号
FNR:行数,各文件分别计数;
awk '{print FNR}' /etc/passwd /etc/issue
awk '{print FNR,$0}' /etc/passwd /etc/issue
FILENAME:当前文件名;
awk '{print FILENAME,$0}' /etc/passwd /etc/issue 在每一行前加上文件名
ARGC:命令行参数的个数;
awk '{print ARGC}' /etc/issue
ARGV:数组&#