IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> awk命令和用法 -> 正文阅读

[系统运维]awk命令和用法

awk命令和用法

AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。
之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。
语法

awk [选项参数] 'script' var=value file(s)
或
awk [选项参数] -f scriptfile var=value file(s)

awk脚本
关于 awk 脚本,我们需要注意两个关键词 BEGIN 和 END。

BEGIN{ 这里面放的是执行前的语句 }
END {这里面放的是处理完所有的行后要执行的语句 }
{这里面放的是处理每一行时要执行的语句}

模式匹配
当awk读入一行时,它试图匹配脚本中的每个模式匹配规则。只有与一个特定的模式相匹配的输入行才能成为操作对象。如果没有指定操作,与模式相匹配的输入行将被打印出来(执行打印语句是一个默认操作)。

[root@localhost ~]# cat 123
Hello World



[root@localhost ~]# awk '/^$/{print"Hello World"}' 123 
Hello World
Hello World
Hello World

记录和字段
awk假设它的输入是有结构的,而不只是一串无规则的字符。在最简单的情况下,它将每个输入行作为一条记录,而将由空格或制表符(tab)分隔的单词作为字段(用来分隔字段的字符被称为分隔符,默认的分隔符就是空格,并且不管有多少个空格,它都会合并成一个)。
字段和引用的分离
awk允许使用字段操作符$来指定字段。在该操作符后面跟着一个数字或变量,用于标识字段的位置。“$1”表示第一个字段,“$2”表示第二个字段等等。“$0”表示整个输入记录。

[root@localhost ~]# df -h
文件系统             容量  已用  可用 已用% 挂载点
devtmpfs             1.8G     0  1.8G    0% /dev
tmpfs                1.9G     0  1.9G    0% /dev/shm
tmpfs                1.9G   26M  1.8G    2% /run
tmpfs                1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/mapper/cs-root   46G  8.2G   37G   19% /
/dev/sda1           1014M  243M  772M   24% /boot
tmpfs                371M  1.2M  370M    1% /run/user/42
tmpfs                371M  5.7M  366M    2% /run/user/0
[root@localhost ~]# df -h | awk '{print $1}'
文件系统
devtmpfs
tmpfs
tmpfs
tmpfs
/dev/mapper/cs-root
/dev/sda1
tmpfs
tmpfs
[root@localhost ~]# df -h | awk '{print $1,$2}'
文件系统 容量
devtmpfs 1.8G
tmpfs 1.9G
tmpfs 1.9G
tmpfs 1.9G
/dev/mapper/cs-root 46G
/dev/sda1 1014M
tmpfs 371M
tmpfs 371M

下面这个正则表达式可以分段进行解释。“1?”表示出现零个或一个1;“(-I)?”表示在随后的位置上查找一个连字符或一个空格,或什么也没有;“(?”表示查找零个或一个左括号;反斜杠能够防止将“(”解释为用于分组的元字符;“[O-9]+”表示查找一个或多个数字;注意我们采用了简便的方法,仅指定一到多位数字,而不是精确地指定3位数字。在随后的位置,我们查找一个可选的右括号,接着查找一个空格或一个连字符,或什么也没有。然后用”[O~9]+”查找一到多位数字,随后跟一个连字符,最后跟一到多位数字。

[root@localhost ~]# cat 123
707-724-0000
(707) 724-0000
(707)724-0000
1-707-724-0000
1 707-724-0000
1(707)724-0000

[root@localhost ~]# awk '/1?[- ]?\(?[0-9]+\)?[- ]?[0-9]+-[0-9]+/' 123
707-724-0000
(707) 724-0000
(707)724-0000
1-707-724-0000
1 707-724-0000
1(707)724-0000
[root@localhost ~]# awk '/^\([0-9]+\) ?[0-9]+-[0-9]+/' 123 
(707) 724-0000
(707)724-0000

awk常见的内建变量(可直接使用)

运算符描述
= += -= *= /= %= ^= **=赋值
?: C条件表达式
&&逻辑与
~ 和 !~匹配正则表达式和不匹配正则表达式
< <= > >= != ==关系运算符
空格连接
+ -加,减
* / %乘,除与求余
+ - !一元加,减和逻辑非
^ ***
++ –增加或减少,作为前缀或后缀
$字段引用
in数组成员

可选的参数
-v 定义变量
-f 调用脚本
-F 指定分隔符

? 尽管操作可能会很复杂,但语法总是这样,其中 BEGIN 表示 在开始之前做的事, // 是匹配代码块,可以是字符串或正则表达式,用斜杠包起来。而 action 是在找到匹配内容时所执行的一系列命令,包含一条或多条命令,多条命令用 ; 隔开。END{} 是结尾代码块,在对每一行进行处理之后再执行的代码块,主要是进行最终计算或输出结尾摘要信息

? awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息。通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。
awk中字符的含义

$0表示全部内容
$1每行第一个字段
NF字段数量
NR每行的记录号,多文件记录递增
FNR与NR类似,不过多文件记录不递增,每个文件都从1开始
\t制表符,tab键一个位置
\n换行符
FSBEGIN时定义分隔符
RS输入的记录分隔符, 默认为换行符(即文本是按一行一行输入)
~包含
!~不包含
==等于,必须全部相等,精确比较
!=不等于,精确比较
&&逻辑与
-F [:#/]定义了三个分隔符
+匹配时表示1个或1个以上
OFS输出字段分隔符, 默认也是空格,可以改为其他的
ORS输出的记录分隔符,默认为换行符,即处理结果也是一行一行输出到屏幕
/[0-9][0-9]+/两个或两个以上数字
/[0-9][0-9]*/一个或一个以上数字

调用awk
1.将所有的awk命令插入一个单独文件,然后调用:
awk -f awk-script-file input-file(s)
其中,-f选项加载awk-script-file中的awk脚本,input-file(s)跟上面的是一样的。

2.命令行方式
awk [-F field-separator] ‘commands’ input-file(s)
其中,commands 是真正awk命令,[-F域分隔符]是可选的。 input-file(s) 是待处理的文件。
在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。

3.shell脚本方式
将所有的awk命令插入一个文件,并使awk程序可执行,然后awk命令解释器作为脚本的首行,一遍通过键入脚本名称来调用。
相当于shell脚本首行的:#!/bin/sh
可以换成:#!/bin/awk

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-09-22 15:02:37  更:2021-09-22 15:04:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 17:04:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码