9. 文本三剑客之awk

文章目录

    • 9.1 什么是awk
    • 9.2 awk命令格式
    • 9.3 awk执行流程
    • 9.4 行与列
      • 9.4.1 取行
      • 9.4.2 取列

9.1 什么是awk

虽然sed编辑器是非常方便自动修改文本文件的工具,但其也有自身的限制。通常你需要一个用来处理文件中的数据的更高级工具,它能提供一个类编程环境来修改和重新组织文件中的数据。这正是awk能够做到的。

awk程序是Unix中的原始awk程序的GNU版本。 awk程序让流编辑迈上了一个新的台阶,它提供了一种编程语言而不只是编辑器命令。在awk编程语言中,你可以做下面的事情:

  • 定义变量来保存数据;
  • 使用算术和字符串操作符来处理数据;
  • 使用结构化编程概念(比如if-then语句和循环)来为数据处理增加处理逻辑;
  • 通过提取数据文件中的数据元素,将其重新排列或格式化,生成格式化报告。

awk程序的报告生成能力通常用来从大文本文件中提取数据元素,并将它们格式化成可读的报告。其中最完美的例子是格式化日志文件。在日志文件中找出错误行会很难, awk程序可以让你从日志文件中过滤出需要的数据元素,然后你可以将其格式化,使得重要的数据更易于阅读。

结构化数据:意思是数据的格式是固定的,例如在数据库中存储人的信息可以通过以下字段来定义

id name age birth gender like …

1 张三 20 5.26 男 看书

2 李四 18 男 电影

3 王五 19 4.5 女

半结构化数据:它可能部分信息是有一定固定结构,而另一部分则没有固定结构。例如日志内容

date ip method

非结构化数据:数据是没有固定结构的,例如图片、电影、音乐这类文件都是非结构化数据

9.2 awk命令格式

Usage: awk [POSIX or GNU style options] -f progfile [--] file ...
Usage: awk [POSIX or GNU style options] [--] 'program' file ...
选项描述
-F fs指定行中划分数据字段的字段分隔符
-f progfile从指定文件中读取程序
-v var=val在awk中定义一个变量及其默认值
-mf N指定要处理的数据文件中最大的字段数
-mr N指定数据文件中最大数据的行数

官方示例:

Examples:awk '{ sum += $1 }; END { print sum }' fileawk -F: '{ print $1 }' /etc/passwd

9.3 awk执行流程

例如执行如下的命令:

awk -F , 'BEGIN{print "name"}{print $2}END{print "end of file"}' openlab.txt

所操作的流程:

9.4 行与列

名词awk中叫法一些说明
记录 record每一行默认通过回车分割的
字段,域 field每一列默认通过空格分割的

9.4.1 取行

awk说明
NR==1取出某一行
NR>=1&&NR<=5取出1~5号
/openlab/过滤
/101/,/105/取出 101~105
符号> >= < <= == !=

使用示例:

[root@openEuler ~]# vim openlab.txt
[root@openEuler ~]# cat openlab.txt 
My name is jock.
I teach linux.
101
I like play computer game.
My qq is 24523452
105
openlab is good# 1. 获取第一行
[root@openEuler ~]# awk 'NR==1' openlab.txt 
My name is jock.# 2. 范围获取,获取1~5行
[root@openEuler ~]# awk 'NR>=1 && NR<=5' openlab.txt 
My name is jock.
I teach linux.
101
I like play computer game.
My qq is 24523452# 3. 从文件中过滤 /openlab
[root@openEuler ~]# awk '/openlab/' openlab.txt 
openlab is good

9.4.2 取列

awk说明
-F指定分割符,指定每一列结束标记(默认是空格,连续的空格,tab键)
$n取出某一列,n是从1开始的整数
$0取出所有列,即整行
$NF最后一列
$(NF-1)最后第二列
-v定义分割符变量的值
FSField Separator 字段分割符,每个字段结束标记,-v FS=: 它等价于 -F:
OFSOutput Field Separator 输出字段分割符(awk显示每一列时,每一列之间通过什么分割,默认是空格)

示例:

# 取出ls -l 命令输出结果的第5列
[root@openEuler ~]# ls -l | awk '{print $5}'916
4096
119072917
125801637
8287769
10675730
7892
102
2413
92584268
0
4958
79# 取出ls -l 命令输出结果的第5列和最后一列
[root@openEuler ~]# ls -l|awk '{print $5,$9}'916 anaconda-ks.cfg
4096 data
119072917 grafana-enterprise-10.4.2-1.x86_64.rpm
125801637 grafana-enterprise-10.4.2.linux-amd64.tar.gz
8287769 mysqld_exporter-0.15.1.linux-amd64.tar.gz
10675730 node_exporter-1.8.0.linux-amd64.tar.gz
7892 nohup.out
102 openlab.txt
2413 passwd
92584268 prometheus-2.45.4.linux-amd64.tar.gz
0 sshd_config
4958 sshd_configr
79 test.txt
[root@openEuler ~]# ls -l|awk '{print $5,$(NF)}'348116
916 anaconda-ks.cfg
4096 data
119072917 grafana-enterprise-10.4.2-1.x86_64.rpm
125801637 grafana-enterprise-10.4.2.linux-amd64.tar.gz
8287769 mysqld_exporter-0.15.1.linux-amd64.tar.gz
10675730 node_exporter-1.8.0.linux-amd64.tar.gz
7892 nohup.out
102 openlab.txt
2413 passwd
92584268 prometheus-2.45.4.linux-amd64.tar.gz
0 sshd_config
4958 sshd_configr
79 test.txt# 3. 将输出的结果列对齐
[root@openEuler ~]# ls -l|awk '{print $5,$(NF)}'| column -t
348116     
916        anaconda-ks.cfg
4096       data
119072917  grafana-enterprise-10.4.2-1.x86_64.rpm
125801637  grafana-enterprise-10.4.2.linux-amd64.tar.gz
8287769    mysqld_exporter-0.15.1.linux-amd64.tar.gz
10675730   node_exporter-1.8.0.linux-amd64.tar.gz
7892       nohup.out
102        openlab.txt
2413       passwd
92584268   prometheus-2.45.4.linux-amd64.tar.gz
0          sshd_config
4958       sshd_configr
79         test.txt# 4. 使用awk调换/etc/passwd文件的第一列和最后一列的内容
[root@openEuler ~]# awk -F: -v OFS=: '{print $NF,$2,$3,$4,$5,$6,$1}' passwd | head -5
/bin/bash:x:0:0:Super User:/root:root
/usr/sbin/nologin:x:1:1:bin:/bin:bin
/usr/sbin/nologin:x:2:2:daemon:/sbin:daemon
/usr/sbin/nologin:x:3:4:adm:/var/adm:adm
/usr/sbin/nologin:x:4:7:lp:/var/spool/lpd:lp

注意:$(NF) 表示获取最后一列,最后第二列是 $(NF-1)

案例:取出网卡中的 IP 地址。

# 使用 sed 来实现
[root@openEuler ~]# ip a show ens160|sed -n '3p'|sed -r 's/(.*t )(.*)(\/.*$)/\2/g'
192.168.72.131# 使用awk 来实现
[root@openEuler ~]# ip a show ens160|awk 'NR==3'|awk -F'[ /]+' '{print $3}'192.168.72.131

NR:Number of Record

NF:Number of Field

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/853716.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【CT】LeetCode手撕—20. 有效的括号

题目 原题连接&#xff1a;20. 有效的括号 1- 思路 模式识别 模式1&#xff1a;括号左右匹配 ——> 借助栈来实现 ——> Deque<Character> deque new LinkedList<>()模式2&#xff1a;顺序匹配 ——> 用 if 判断 具体思路 1.遇到左括号 直接入栈相应…

FPGA IO_BANK、IO_STANDARD

描述 Xilinx 7系列FPGA和UltraScale体系结构提供了高性能&#xff08;HP&#xff09;和 高范围&#xff08;HR&#xff09;I/O组。I/O库是I/O块&#xff08;IOB&#xff09;的集合&#xff0c;具有可配置的 SelectIO驱动程序和接收器&#xff0c;支持多种标准接口 单端和差分。…

JS中的延时操作setTimeout()和setInterval()

JS中&#xff0c;给我们提供两种延时操作的内置方法setTimeout()和setInterval()。setTimeout和setInterval方法都是挂载在javascript的window对象下&#xff0c;通过两个参数控制&#xff0c;第一个参数控制运行的表达式或方法&#xff0c;第二个参数表示延时的时间&#xff0…

【电路笔记】-共基极放大器

共基极放大器 文章目录 共基极放大器1、概述2、等效电路3、电流增益4、输入阻抗5、输出阻抗6、电压增益7、示例:电压、电流和功率增益8、总结1、概述 在本文中,我们将介绍双极晶体管放大器的最后一种拓扑,称为共基极放大器 (CBA)。 下面的图 1 显示了 CBA 的电气图,此处没…

vite-plugin-pwa 离线安装Vite应用

渐进式Web应用&#xff08;PWA&#xff09;通过结合 Web 和移动应用的特点&#xff0c;为用户带来更加流畅和快速的体验。且PWA支持离线访问能力&#xff08;访问静态资源本地缓存&#xff09;&#xff0c;极大提高了用户交互的流畅性&#xff0c;降低非必要的网络依赖。尤其适…

卡尔曼滤波源码注释和调用示例

卡尔曼滤波源码注释和调用示例 flyfish Python版本代码地址 C版代码地址 主要用于分析代码&#xff0c;增加了中文注释 import numpy as np import scipy.linalg""" 0.95分位数的卡方分布表&#xff0c;N自由度&#xff08;包含N1到9的值&#xff09;。 取自…

【JS重点15】原型对象概述

目录 一&#xff1a;构造函数缺陷 二&#xff1a;原型 1 原型是是什么 2 原型对象的作用 3 原型对象this指向问题 4 利用原型对象添加方法 给JS内置构造函数Array添加最大值方法 给JS内置构造函数Array添加求和方法 三&#xff1a;Constructor属性 四&#xff1a;如何…

情绪管理:大我则定,小我则乱(王阳明)

学了很多知识&#xff0c;却还是感物易动&#xff1f;如何让心回归中正&#xff1f;王阳明一言以蔽之&#xff1a; —— 大我&#xff0c;大我则定&#xff0c;小我则乱 保持心静的方法&#xff1a;有大爱&#xff0c;为大局着想

全球“抱团”美股,美股“抱团”AI

内容提要 过去一个月内&#xff0c;全球约有300亿美元新资金流入股票基金&#xff0c;其中高达94%投向了美国资产&#xff1b;一季度&#xff0c;海外投资者购入了1870亿美元美国公司债券&#xff0c;同比增长61%。 文章正文 尽管美国面临债务问题和大选带来的政治分歧&#…

单链表——AcWing.826单链表

单链表 定义 单链表是一种常见的数据结构&#xff0c;它由一系列节点组成&#xff0c;每个节点包含一个数据元素和一个指向下一个节点的指针。 运用情况 用于实现动态的数据存储和管理&#xff0c;例如实现栈、队列等其他数据结构。在需要频繁进行插入和删除操作时非常有用…

pdf文件怎么改变大小?在线快速压缩pdf的方法

pdf作为一种常用的文件格式&#xff0c;使用这种文件类型的好处在于不仅拥有更好的兼容性&#xff0c;还可以设置密码来保证安全性&#xff0c;防止未授权用户查看内容&#xff0c;所以现在导出文件展示都会采用这种格式的来做内容展示。当遇到pdf文件过大问题时&#xff0c;想…

Python虚拟环境的配置

前言&#xff1a; 本人一度被Python的虚拟环境的配置所困扰&#xff0c;前段时间抽空学习了一下&#xff0c;现在总结一下方法&#xff0c;供大家参考。 先使用winr打开命令行窗口。 展示所有虚拟环境 conda env list 创建虚拟环境 例如我们创建一个叫做py_sk的虚拟环境 …

MSPM0L1306快速创建可移动工程(一)

设置成文本文件 宏定义 __MSPM0L1306__

大型企业IT基础架构和应用运维体系

大型企业IT基础架构和应用运维体系 在数字化转型的浪潮中&#xff0c;大型企业面临着日益复杂的IT环境。高效的IT基础架构和应用运维体系&#xff0c;是确保企业业务连续性和竞争力的关键。本文将探讨大型企业如何构建强健的IT基础架构&#xff0c;并建立高效的应用运维体系&a…

Codeforces Global Round 26 A~E

A.Strange Splitting&#xff08;思维&#xff09; 题意&#xff1a; 将非空数组的范围定义为最大值减去最小值。例如&#xff0c; [ 1 , 4 , 2 ] [1,4,2] [1,4,2]的范围是 4 − 1 3 4-13 4−13。 给你一个长度为 n ≥ 3 n\geq 3 n≥3的数组 a 1 , a 2 , … , a n a_1,a_2,…

SpringBoot整合H2数据库并将其打包成jar包、转换成exe文件二(补充)

SpringBoot整合H2数据库并将其打包成jar包、转换成exe文件二&#xff08;补充&#xff09; 如果你想在cmd命令窗口内看到程序运行&#xff0c;即点开弹出运行窗口&#xff0c;关闭时exe自动关闭。 需要再launch4j上进行如下操作&#xff1a; 这样转换好的exe就可以有控制台了…

卡尔曼滤波原理及应用(一)

一.状态空间方程 系统的状态空间方程描述了系统的动态行为和状态演化过程。它由两个方程组成&#xff1a;状态方程和观测方程。系统的状态空间表达式简写为&#xff1a; 变量描述如下&#xff1a; x(t) 是系统的状态向量&#xff0c;表示系统在时间 &#x1d461;的状态。&…

【2024亲测无坑】Oracle--19C在Centos7上的静默安装(rpm版)

一、Oracle 19c Linux安装&#xff08;Centos 7&#xff09; 1.查看磁盘可用空间及配置ip地址 [rootlocalhost /]# df -h 文件系统 容量 已用 可用 已用% 挂载点 devtmpfs 1.4G 0 1.4G 0% /dev tmpfs 1.4G …

程序猿大战Python——函数——拆包和交换变量值与引用

拆包 目标&#xff1a;了解拆包的使用。 先来看看在现实生活中的拆包。比如&#xff0c;张同学背着背包来教室上课后&#xff0c;需要从背包中拿出电脑、鼠标、数据线、电源线等&#xff0c;这个过程就是拆包! 接着&#xff0c;看一下在Python程序中的拆包&#xff1a;把组合形…

阅读笔记:明朝那些事儿太监弄乱的王朝

阅读豆评高分作品《明朝那些事儿太监弄乱的王朝》第三部&#xff0c;截止到今天告一段落了&#xff0c;前两部皇帝&#xff0c;太子相对比较少&#xff0c;了解故事的主线&#xff0c;分支不算多&#xff0c;记忆起来还能应付过来&#xff0c;第三部皇帝&#xff0c;太子更换的…