AWK简介

awk介绍

        awk是一种编程语言,主要用于在linux/unix下对文本和数据进行处理,是linux/unix下的一个工具。awk是gawk的一个软链接。

        awk的处理文本和数据的方式:逐行扫描文件,默认从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。

awk能干啥?

        awk用来处理文件和数据的,是类unix下的一个工具,也是一种编程语言。可以用来统计数据,比如网站的访问量,访问的IP量等等。支持条件判断,支持for和while循环。

awk的命令行模式使用

1、语法结构:

        awk 选项 '命令部分' 文件名

        特别说明:命令部分如果引用shell变量需用双引号引起,其他情况都使用单引号。

        luck_user=tom

        sed -i “/$luck_user/d” file

2、常用选项

        -F 定义字段分割符号,默认的分隔符是空格

        -v 定义变量并赋值

命名部分说明

        正则表达式,地址定位

                '/root/{awk语句}'     sed中: '/root/p'

                'NR==1,NR==5{awk语句}' sed中: '1,5p'

                '/^root/,/^ftp/{awk语句}'       sed中:'/^root/,/^ftp/p'

        {awk语句1**;awk语句2;**...}

                '{print $0;print $1}'             sed中:'p'

                'NR==5{print $0}'     sed中:'5p'

                注:awk命令语句间用分号间隔

        BEGIN...END....

                'BEGIN{awk语句};{处理中};END{awk语句}'

                'BEGIN{awk语句};{处理中}'

                '{处理中};END{awk语句}'

awk脚本模式使用

1、脚本编写

#!/bin/awk -f

以下是awk引号里的命令清单,不要用引号保护命令,多个命令用分号间隔

BEGIN{FS=":"}

NR==1,NR==3{print $1"\t"$NF}

2、脚本执行

方法1:

awk 选项 awk的脚本文件 要处理的文本文件

awk -f awk.sh filename

sed -f sed.sh -i filename

方法2:

./awk的脚本文件(或者绝对路径) 要处理的文本文件

./awk.sh filename

./sed.sh filename

awk相关变量

AWK简介

#打印文件中的所有内容

awk '{print $0}' a.txt

#打印1-5行的内容

awk 'NR==1,NR==5{print $0}' a.txt

awk 'NR==1,NR==5' a.txt

awk 'NR>=1 && NR<=5{print $0}' a.txt

#打印第1行和第5行

awk 'NR==1 || NR==5{print $0}' a.txt

#按逗号分隔,打印第一列、最后一列和倒数第二列

awk -F: '{print $1,$NF,$(NF-1)}' a.txt

#打印每一行的列数

awk -F: '{print NF}' a.txt

#打印包含root的行

awk '/root/{print $0}' a.txt

awk '/root/' a.txt

#打印以“ : ”分割的包含root的第一列和最后一列

awk -F: '/root/{print $1,$NF}' a.txt

#打印1到5行且打印包含root的行

awk 'NR==1,NR==5;/^root/{print $0}' a.txt

#使用FS定义间隔符

awk 'BEGIN{FS=":"};{print $1,$NF}' a.txt

#使用OFS定义输出间隔符

awk -F: 'BEGIN{OFS="@"};{print $1,$NF}' a.txt

awk 'BEGIN{FS=":";OFS="@"};{print $1,$NF}' a.txt

awk 'BEGIN{FS=":"};{print $1"@"$NF}' a.txt

数据准备

# vi b.txt

tom xiaohua susan lala jim tom

lele huhu xiaohua xiaoli xiaoming haha

#使用RS定义行分割符

awk 'BEGIN{RS="\t"};{print $1,$2}' b.txt

#使用ORS定义输出数据的行分隔符

awk 'BEGIN{RS="\t";ORS="\n\n"};{print $1,$2}' b.txt

awk的工作原理

        awk -F: '{print $1,$3}' /etc/passwd

        1、awk使用一行作为输入,并将这一行赋给内部变量$0,每一行也可称为一个记录,以换行符(RS)结束。

        2、每行被间隔符**:**(默认为空格或制表符)分解成字段(或域),每个字段存储在已编号的变量中,从$1开始

问:awk如何知道用空格来分隔字段的呢?

答:因为有一个内部变量FS来确定字段分隔符。初始时,FS赋为空格

        3、awk使用print函数打印字段,打印出来的字段会以空格分隔,因为$1,$3之间有一个逗号。逗号比较特殊,它映射为另一个内部变量,称为输出字段分隔符OFS,OFS默认为空格。

        4、awk处理完一行后,将从文件中获取另一行,并将其存储在$0中,覆盖原来的内容,然后将新的字符串分隔成字段并进行处理。该过程将持续到所有行处理完毕。

上一篇:2021-10-15


下一篇:文本处理awk 内核管理及加密安全