awk

作者: chen_666 | 来源:发表于2021-11-11 15:37 被阅读0次

awk ‘条件 1{动作 1} 条件 2{动作 2}…’ 文件名
条件(Pattern):
一般使用关系表达式作为条件。这些关系表达式非常多,具体参考表 12-3 所示,例如:
x > 10 判断变量 x 是否大于 10
x == y 判断变量 x 是否等于变量 y
A ~ B 判断字符串 A 中是否包含能匹配 B 表达式的子字符串
A !~ B 判断字符串 A 中是否不包含能匹配 B 表达式的子字符串
动作(Action):
格式化输出
流程控制语句

执行流程

1) 如果有 BEGIN 条件,则先执行 BEGIN 定义的动作
2) 如果没有 BEGIN 条件,则读入第一行,把第一行的数据依次赋予0、1、2 等变量。其中0
代表此行的整体数据,1 代表第一字段,2 代表第二字段。
2) 依据条件类型判断动作是否执行。如果条件符合,则执行动作,否则读入下一行数据。如果
没有条件,则每行都执行动作。
3) 读入下一行数据,重复执行以上步骤

[root@localhost ~]# awk '{printf $2 "\t" $6 "\n"}' student.txt 
#输出第二列和第六列
begin
[root@localhost ~]# awk 'BEGIN{printf "This is a transcript \n" } 
{printf $2 "\t" $6 "\n"}' student.txt 
#awk 命令只要检测不到完整的单引号不会执行,所以这个命令的换行不用加入“\”,就是一行命令
#这里定义了两个动作
#第一个动作使用 BEGIN 条件,所以会在读入文件数据前打印“这是一张成绩单”(只会执行一次)
end
[root@localhost ~]# awk 'END{printf "The End \n" } 
{printf $2 "\t" $6 "\n"}' student.txt
#在输出结尾输入“The End”,这并不是文档本身的内容,而且只会执行一次
关系运算符
[root@localhost ~]# cat student.txt | grep -v Name | \
awk '$6 >= 87 {printf $2 "\n" }'
#使用 cat 输出文件内容,用 grep 取反包含“Name”的行
#判断第六字段(平均成绩)大于等于 87 分的行,如果判断式成立,则打第六列(学员名)
包含
[root@localhost ~]# awk '$2 ~ /Sc/ {printf $6 "\n"}' student.txt 
#如果第二字段中输入包含有“Sc”字符,则打印第六字段数据
85.66
正则
[root@localhost ~]# awk '/Liming/ {print}' student.txt 
#打印 Liming 的成绩

[root@localhost ~]# df -h | awk '/sda[0-9]/ {printf $1 "\t" $5 "\n"} ' 
#查询包含有 sda 数字的行,并打印第一字段和第五字段
指定分隔符
[root@localhost ~]# cat /etc/passwd | grep "/bin/bash" | \
awk 'BEGIN {FS=":"} {printf $1 "\t" $3 "\n"}'
流程控制

在 awk 编程中,因为命令语句非常长,在输入格式时需要注意以下内容:
 多个条件{动作}可以用空格分割,也可以用回车分割。
 在一个动作中,如果需要执行多个命令,需要用“;”分割,或用回车分割。
 在 awk 中,变量的赋值与调用都不需要加入“$”符。
 条件中判断两个值是否相同,请使用“==”,以便和变量赋值进行区分。

[root@localhost ~]# awk 'NR==2{php1=$3} 
NR==3{php2=$3} 
NR==4{php3=$3;totle=php1+php2+php3;print "totle php is " totle}' student.txt 
#统计 PHP 成绩的总分

function 函数名(参数列表){
函数体
}

 awk 'function test(a,b) { printf a "\t" b "\n" }
 { test($2,$6) } ' student.txt

awk 中调用脚本

[root@localhost ~]# vi pass.awk
BEGIN {FS=":"}
{ print $1 "\t" $3}

awk -f pass.awk /etc/passwd
root 0
bin 1
daemon 2

相关文章

  • 18-文本处理三剑客之awk

    本章内容 ◆ awk介绍◆ awk基本用法◆ awk变量◆ awk格式化◆ awk操作符◆ awk条件判断◆ aw...

  • 2017 09-04 AWK

    本章主要学习内容awk介绍 awk基本用法 awk变量 awk格式化 awk操作符 awk条件判断 a...

  • 【技术案例】跟老男孩学运维-awk项目案例

    一个awk数组应用案例 [TOC] 0.技术点: awk awk数组 awk判断 awk数组赋值 awk函数spl...

  • awk

    awk:报告生成器,格式化文本输出 内容: awk介绍 awk基本用法 awk变量 awk格式化 awk操作符 a...

  • awk

    Linux System Environment awk功能 awk格式 awk 参数 一、awk截取列 二、显示...

  • 笔记-awk

    1.Awk基础介绍 2.awk语法格式 2.Awk工作原理 3.Awk内部变量 4.Awk格式输出 5.Awk模式...

  • awk用法详解

    awk 用法 awk ' pattern {action} ' 1、awk '/101/' file ...

  • Day64-shell编程_正则表达式_awk

    1.Awk基础介绍 2.Awk工作原理 3.Awk内部变量 4.Awk格式输出 5.Awk模式匹配 5.1符号 ...

  • linux-awk

    linux-awk awk基本结构 awk ‘BEGIN{ print “start”} pattern { co...

  • awk小说

    awk awk脚本的结构基本如下: awk ' BEGIN{ print "start" } patern { c...

网友评论

      本文标题:awk

      本文链接:https://www.haomeiwen.com/subject/yqdpbktx.html