Linux云计算 |【第二阶段】SHELL-DAY5

主要内容:

awk命令、内置变量(FS、$0、$1、$2、NF、NR)、过滤时机(BEGIN{}、{}、END{})、处理条件(正则、&&、||、~\!~、==等)、awk数组、监控脚本、安全检测脚本

一、awk介绍

awk 是一种强大的文本处理工具,广泛用于 Unix 和 Linux 系统中。它是一种编程语言,专门用于处理结构化数据和生成格式化的报告。awk 的名字来源于其三位开发者 Alfred Aho、Peter Weinberger 和 Brian Kernighan 的姓氏首字母。

作用:基于模式匹配检查输入文本,逐行处理并输出;通常用在Shell脚本中,获取指定的数据;单独使用时,可对文本数据做统计;(精确搜索、数据统计

补充:awk过滤数据时支持仅打印某一列;

补充:处理文本时,若未指定分隔符,则默认将空格、Tab制表符等作为分隔符。

1、awk 基本用法

格式:awk 'pattern { action }' file

  • pattern:用于匹配输入行的条件。如果省略,awk 将对所有行执行 action
  • action:在匹配的行上执行的操作。
  • file:要处理的文件。如果省略,awk 将从标准输入读取数据。

常用 action 指令:

  • {print}   输出

补充:使用awk时,如果指令就是{print},且前面写了条件的情况下可以省略{print}

awk 的基本概念:

  1. 记录(Record):awk 将输入数据视为一系列记录。默认情况下,记录是由换行符分隔的行
  2. 字段(Field):每个记录由字段组成。默认情况下,字段是由空格或制表符分隔的。字段可以通过 \$1, \$2, \$3, ... 来访问
  3. 变量:awk 有许多内置变量,例如 NF(字段数)、NR(记录数)、FS(字段分隔符)等

2、awk 内置变量

说明:

  • \$0:文本当前行的全部内容(整行)
  • \$1\$2, ...:当前记录的第 1 个、第 2 个字段等(第1列、第2列,依此类推)
  • NF:当前记录中的字段数(有几列)
  • NR:当前记录的行号(类似sed中的"=")
  • FS:字段分隔符(默认是空格或制表符)
  • RS:记录分隔符(默认是换行符)
  • OFS:输出字段分隔符(默认是空格)
  • ORS:输出记录分隔符(默认是换行符)

3、awk 常见用法

1)特定字段打印

打印文件 file.txt 中每一行的第一个和第三个字段

awk '{ print \$1, \$3 }' file.txt

2)使用模式匹配

打印文件 file.txt 中包含 pattern 的行

awk '/pattern/ { print \$0 }' file.txt

3)计算字段的总和

计算文件 file.txt 中第一个字段的总和,并在处理完所有行后打印总和

awk '{ sum += \$1 } END { print sum }' file.txt

4)使用自定义字段分隔符

使用冒号 : 作为字段分隔符,并打印 /etc/passwd 文件中每一行的第一个字段。

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

5)使用变量

打印文件 file.txt 中每一行的第一个字段,并在前面加上变量 var 的值。

awk -v var="Hello" '{ print var, \$1 }' file.txt

 4、awk 常用选项

-F fs

  • 说明:指定输入字段分隔符(Field Separator)。
  • 示例:awk -F':' '{ print \$1 }' /etc/passwd
  • 解释:使用冒号 : 作为字段分隔符,并打印 /etc/passwd 文件中每一行的第一个字段。

-v var=value

  • 说明:定义一个变量并赋值。
  • 示例:awk -v var="Hello" '{ print var, \$1 }' file.txt
  • 解释:定义变量 var 并赋值为 "Hello",然后打印文件 file.txt 中每一行的第一个字段,并在前面加上变量 var 的值。

-f scriptfile

  • 说明:从指定的脚本文件中读取 awk 命令。
  • 示例:awk -f script.awk file.txt
  • 解释:从 script.awk 文件中读取 awk 命令,并应用于 file.txt 文件。

-v OFS=output_field_separator

  • 说明:指定输出字段分隔符(Output Field Separator)。
  • 示例:awk -v OFS="," '{ print \$1, \$2, \$3 }' file.txt
  • 解释:使用逗号 , 作为输出字段分隔符,并打印文件 file.txt 中每一行的前三个字段。

-v ORS=output_record_separator

  • 说明:指定输出记录分隔符(Output Record Separator)。
  • 示例:awk -v ORS="\n\n" '{ print \$0 }' file.txt
  • 解释:使用两个换行符 \n\n 作为输出记录分隔符,并打印文件 file.txt 中的每一行。

-v FS=input_field_separator

  • 说明:指定输入字段分隔符(Field Separator)。
  • 示例:awk -v FS="," '{ print \$1 }' file.csv
  • 解释:使用逗号 , 作为输入字段分隔符,并打印文件 file.csv 中每一行的第一个字段。

-v RS=input_record_separator

  • 说明:指定输入记录分隔符(Record Separator)。
  • 示例:awk -v RS="\n\n" '{ print \$0 }' file.txt
  • 解释:使用两个换行符 \n\n 作为输入记录分隔符,并打印文件 file.txt 中的每一行。

-v NF=number_of_fields

  • 说明:指定每行的字段数。
  • 示例:awk -v NF=3 '{ print \$1, \$2, \$3 }' file.txt
  • 解释:指定每行有 3 个字段,并打印文件 file.txt 中每一行的前三个字段。

-v NR=number_of_records

  • 说明:指定处理的记录数。
  • 示例:awk -v NR=5 '{ print \$0 }' file.txt
  • 解释:只处理文件 file.txt 中的前 5 行,并打印每一行。


awk变量练习示例1:

[root@svr7 ~]# cat test     //测试文件
hello the world
welcome to beijing

例如:不加条件,输出所有

[root@svr7 opt]# awk '{print}' test
hello the world
welcome to beijing

例如:输出以h开头的行

[root@svr7 opt]# awk '/^h/{print}' test
hello the world

例如:输出所有行的第1列

[root@svr7 opt]# awk '{print $1}' test
hello
Welcome

例如:输出所有行的第1列和第3列

[root@svr7 opt]# awk '{print $1,$3}' test
hello world
welcome beijing

例如:输出以w开头,$0整行内容,第3列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小安运维日记

Hey~ 感谢您的充电支持!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值