三剑客之awk基础使用

三剑客之awk基础使用_第1张图片
AWK

awk: 又称gawk,以Aho Kernighan Weinberger 3位作者首字母命名的UNIX平台上的强大编辑工具.其原理(处理文件时)是依次(循环遍历一遍)读取文件的每行,一次读取一行,按照分隔符(如果文件是有固定格式的)进行切片或其它处理工作.

用法格式: awk [Options] 'Patterns{Actions Statements}' File1 File2 ...,各段说明如下:

Options:awk命令的选项

-F: 指定对每行处理的分隔符.然后就可以用($0,$1,$2,...)依次取出各列,其中$0指代整行内容.
-v varname: *声明自定义变量 *
示例--> awk -v word="Hello awk!" 'BEGIN{print word}'

Patterns: 匹配模式

BEGIN/END: 特殊模式,仅在awk命令执行前或执行后运行一次.
expression: 表达式,其值非0或为非空字符时满足条件,如$1~/foo/ 或 $1=="ShenZhen"
示例--> awk -F: '$3==0,$7~"nologin"BEGIN{print "username:%10s,userid:%5s,usershell:%20s",$1,$3,$7}' /etc/passwd
/RegularExpression/: 正则表达式
示例--> awk -F: '/^/{print $1,$3}' /etc/passwd

Actions: 处理动作

1.print --> '{print $1, $4}'
2.printf:格式化输出,用法类似C语言里的printf,需要结合各格式化字符才能更加美观地显示输出(不会自动换行)

format格式符 作用
%c 显示字符的ASCII码
%d, %i 十进制
%e, %E 科学计数法显示数值
%f 显示浮点数
%g, %G 以科学计数法的格式或浮点数的格式显示数值.
%s 显示字符串
%u 无符号整数
%% 显示%自身
修饰符 -----
N 显示宽度
- 左对齐
+ 显示数值符号

示例--> awk -F: '{printf "%-15s %i\n", $1, $3}' /etc/passwd

Statements: 脚本语句
        if (condition) statement [ else statement ]
            示例--> awk -F: '{if ($1=="root") print $1, "Admin"; else print $1, "Common User"}' /etc/passwd
        while (condition) statement:对每行内容进行循环处理
            示例-->awk -F: '{i=1;while(i<=3){print $i;i++}}' /etc/passwd
        do statement while (condition)
        for (expr1; expr2; expr3) statement
        for (var in array) statement
            示例-->awk -F: '$NF !~ /^$/{BASH[$NF]++}END{for(A in BASH){printf "%15s:%i\n", A,BASh[A]}}' /etc/passwd
        break
        continue
        delete array[index]
        delete array
        exit [ expression ]
        { statements }
        switch (expression) {
        case value|regex : statement
        ...
        [ default: statement ]
        }
awk内置变量:
变量名 含义
FS Field Separator,(输入)文本文件时所使用的字段分隔符 默认是空白字符
OFS Output Field Separator,输出分隔符,可以自定义各种.示例--> awk 'BEGIN{OFS="++"}{print $1,$2,$3}' test.txt
RS Record Separator,(输入)文本信息所使用换行符
ORS Output Record Separator,输出的换行符
NR Num of Record,行数
FNR 用于记录正处理的行是当前这一文件中被总共处理的行数,而NR记录的行数是所有处理的文件的 总数.
NF Num of Field,当前正在处理的行的列数.示例: awk '{print NF}' a.py # a.py这个文件的各列的列数不确定,所以输出的数字是不一样的.
FILENAME 当前处理的文件文件名.
awk的操作符(与其它语言如Python shell等非常类似):
    -x: 负值
    +x: 转换为数值
    x^y: 与运算
    x**y: x的y次方
    x[+|-|*|/]y: 加减乘除法
    = += -= ...
    ++ --
    xy x<=y x!=y x==y x~y(x能被y模式所匹配) x!~y
    x&&y x||y
    selector?if-true-exp:if-false-exp
awk函数: function_name(para1, para2)

三剑客之grep基础使用
三剑客之sed基础使用

你可能感兴趣的:(三剑客之awk基础使用)