文本处理工具awk

awk是功能最强大的文本工具。awk也是按行操作,对行操作完之后可以根据指定命令来对行取列。

awk分隔符:默认空格或者tab,多个空格会自动压缩成一个。Awk还支持编程语言。

awk操作流程:

        1,按照命令找到指定行

        2,找到后,执行操作,默认为打印。

用法:

        Awk 选项 ‘模式或条件{操作}’ 文件

        -F  指定分隔符

        -v  变量赋值

        操作:默认打印

Awk常用内置变量:内置变量$n前面加$,其他的不加,更不能用引号,也不能用括号,否则会被当作字符串处理

        $0为全部

        $n 表示处理行的第几列

        NR:处理行的行号

        NF:处理当前行的字段个数,$NF表示最后一个字段

        FS:列分隔符,指定文本的分隔符,和F作用相同

        OFS:输出文本的分隔符

        RS:指定分隔符为回车。

打印多列:awk ‘{print $1,$2,$3}’ test.txt8

打印指定行号:awk 'NR==2,NR==4{print}' test.sh

打印范围行号:awk 'NR==2;NR==4{print}' test.sh

打印偶数行: awk 'NR%2==0{print}' test.txt

打印奇数行: awk 'NR%2==1{print}' test.txt

**与^ 求幂

内置函数getline:

        1,,如果getline左右两侧没有重定向符(<>)或者没有管道符(|)时,awk会先读第一行,但是如果加了getline,会跳过第一行读取第二行

        2,如果两边给有重定向符(<>)或者有管道符(|)时,getline作用于定向输入文件:

        awk '{getline < "test1.txt"; print > "test2.txt"}' test1.txt

Begin模式

        Awk ‘BEGIN{...};          {...};        END{...}’ 文件

                      赋值条件  处理文件命令 结束语句

判断文件有多少行:awk 'BEGIN{i=0};{i++};END{print i}' test.txt

条件判断:awk -F: '{if ($3>10) {print}}' test.txt

三元表达式:

        Awk ‘(条件表达式)?(A表达式或者值):(B的表达式或者值)’ 文件

如果第三列大于第四列,打印第三列:awk -F '{i=($3>$4)?$3;$4{print i}}' test.txt

字符串比较:

        $n~”字符串” 表示第n个字段包含某个字符

        $n!~”字符串” 表示第n个字段不包含某个字符

        $==”字符串” 表示第n个字段就是某个字符

        $!=”字符串” 表示第n个字段不是某个字符        

Awk结合数组:

        定义数组:awk ‘BEGIN{a[0]=10;a[1]=20;a[2]=30; for(i in a)print i,a[i]}’

小实验:统计文件内字符段的个数:

        awk '{a[$1]++};END{for (i in a) {print i,a[i]}}' test.txt

你可能感兴趣的:(linux,ssh,运维)