ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

AWK简介

2021-10-22 19:05:25  阅读:174  来源: 互联网

标签:BEGIN 简介 awk print AWK NR txt root


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 '{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中,覆盖原来的内容,然后将新的字符串分隔成字段并进行处理。该过程将持续到所有行处理完毕。

标签:BEGIN,简介,awk,print,AWK,NR,txt,root
来源: https://blog.csdn.net/devilden/article/details/120911451

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有