9. 文本三剑客之awk

news2024/11/28 16:03:04

文章目录

    • 9.1 什么是awk
    • 9.2 awk命令格式
    • 9.3 awk执行流程
    • 11.4 行与列
      • 11.4.1 取行
      • 11.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 }' file
	awk -F: '{ print $1 }' /etc/passwd

9.3 awk执行流程

例如执行如下的命令:

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

所操作的流程:

11.4 行与列

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

11.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

11.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.coloradmin.cn/o/1825312.html

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

相关文章

干部考评系统如何评估干部表现

一、引言 干部考评系统是现代组织管理中不可或缺的一部分&#xff0c;它通过科学、公正、客观的方式对干部的表现进行评估&#xff0c;为干部的选拔、培养、激励和约束提供有力依据。本文旨在探讨干部考评系统如何有效评估干部表现。 二、干部考评系统的构建 明确考评目标&a…

winform 应用程序 添加 wpf控件后影响窗体DPI改变

第一步&#xff1a;添加 应用程序清单文件 app.manifest 第二步&#xff1a;把这段配置 注释放开&#xff0c;第一个配置true 改成false

移动端消息中心,你未必会设计,发一些示例出来看看。

APP消息中心是一个用于管理和展示用户收到的各种消息和通知的功能模块。它在APP中的作用是提供一个集中管理和查看消息的界面&#xff0c;让用户能够方便地查看和处理各种消息。 以下是设计APP消息中心的一些建议&#xff1a; 1. 消息分类&#xff1a; 将消息按照不同的类型进…

Echats-wordcloud 文字云图的踩坑点【Unknown series wordCloud】

在词云渲染时遇到渲染不出来的问题&#xff1a; 原因分析&#xff1a; 1、echart和wordcloud版本不匹配&#xff08;我的是匹配的&#xff09; 解决方案&#xff1a; 1、echart和wordcloud版本要匹配&#xff1a; echart4x 使用wordcloud1x版本 echart5x 使用wordcloud2x版本…

win环境安装Node.js的多种方式

今天我们分享win环境安装Node.js的多种方式&#xff1a; 首先要明白Node.js是一个JavaScript运行环境&#xff0c;它基于Google的V8引擎进行封装&#xff0c;允许JavaScript运行在服务器端。Node.js让JavaScript成为一种与PHP、Python、Perl、Ruby等服务端语言平起平坐的脚本语…

Python也能“零延迟“通信吗?ZeroMQ带你开启高速模式!

目录 1、零基础入门ZeroMQ 🚀 1.1 ZeroMQ简介与安装 1.2 基础概念:Socket类型详解 1.3 实战演练:Hello World示例 2、深入浅出消息模式 🔌 2.1 请求-应答模式( REQ/REP ) 2.2 发布-订阅模式( PUB/SUB ) 2.3 推送-拉取模式( PUSH/PULL ) 3、Python实战ZeroM…

什么是无杂散动态范围 (SFDR)?为什么 SFDR 很重要?

有多种不同的规格可用于表征电路线性度。SFDR 指标是一种常用的规范。该指标定义为所需信号幅度与感兴趣带宽内杂散的比率&#xff08;图 1&#xff09;。 图 1. 显示 SFDR 指标的图表。 对于 ADC&#xff0c;SFDR 展示了 ADC 如何在存在大信号的情况下同时处理小信号。作为一个…

面向对象编程垃圾回收机制

系列文章目录 文章目录 系列文章目录前言一、垃圾回收机制&#xff08;Garbage Collection&#xff09; 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用…

使用Ollama下载的模型文件(Model)默认存放在哪里?

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;Ollama部署LLM专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年6月15日10点28分 &#x1f004;️文章质量&#xff1a;95分 文章目录 使用CMD安装存放位置 默认存放路径 Open WebUI下…

Android Compose 十一:常用组件列表 compose自己个的 下拉刷新

列表下拉刷新 material3 还没有下拉刷新功能material:1.3.0 之后 swiperefresh 被弃用 被PullRefresh替代使用PullRefresh 需要添加依赖 implementation ‘androidx.compose.material:material:1.6.8’ 先上代码 var refreshing by remember {mutableStateOf(false)} val…

C++ 03 之 命名空间

game_kun.cpp #include "game_kun.h"void kun::atk() {cout << "吃鸡的攻击"<< endl; } game_lol.cpp #include "game_lol.h"void lol::atk() {cout << "lol的攻击"<< endl; } game_kun.h #include <…

实用软件下载:XMind 2024最新安装包及详细安装教程

​XMind不仅是一款易用且功能强大的思维导图软件&#xff0c;也是一个开源项目。XMind以构建一个社区向全球提供领先的跨平台思维导图和头脑风暴软件为目标&#xff0c;以帮助用户提升效率。XMind公司是XMind开源项目的主要代码贡献者&#xff0c;与此同时&#xff0c;我们欢迎…

MyBatis 的注解式开发

1. MyBatis 的注解式开发 文章目录 1. MyBatis 的注解式开发2. 准备工作3. Insert 插入/添加4. Delete 删除5. Update 更新/修改6. Select 查询7. 总结&#xff1a;8. 最后&#xff1a; MyBatis 中也提供了注解式开发方式&#xff0c;采用注解可以减少Sql映射文件的配置。 当然…

【unity笔记】一、常见技术名词解析(HDRP/URP)

一、简介 在Unity中&#xff0c;Shader是用于控制图形渲染过程中顶点和像素处理的程序。Shader通常用于定义物体在屏幕上呈现的外观&#xff0c;包括光照、纹理、颜色和其他视觉效果。Shader编写在特定的着色语言中&#xff0c;如HLSL&#xff08;High-Level Shading Language…

pandasa——数据连接和可视化

1 数据连接 concat merge join append 竖直方向追加&#xff0c; 在最新的pandas版本中已经被删除掉了&#xff0c; 这里推荐使用concat 1.1 pd.concat 两张表&#xff0c; 通过行名、列名对齐进行连接 import pandas as pd df1 pd.DataFrame([[1, 2, 3], [1, 10, 20], […

IOC (一)

》》新建一个CORE 控制台程序 注册服务 》》 安装 Microsoft.Extensions.DependencyInjection using Microsoft.Extensions.DependencyInjection;namespace ConsoleApp1 {internal class Program{static void Main(string[] args){Method();Console.ReadKey();}static void…

[Java基本语法] 逻辑控制与方法

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏:&#x1f355; Collection与数据结构 (92平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 &#x1f9c0;线程与…

Keysight 是德 N9343C 手持式频谱分析仪

Keysight 是德 N9343C 手持式频谱分析仪 主要特性与技术指标 功能 • 1 MHz &#xff5e; 13.6 GHz&#xff08;可调谐至 9 kHz&#xff09; • 内部前置放大器高达 13.6 GHz • 内置 GPS 接收机和 GPS 天线 • 内置跟踪发生器 性能 • -144 dBm 典型的显示平均噪声电平&a…

IT入门知识博客文章大纲第一部分《IT基础知识》(1/10)

目录 IT入门知识博客文章大纲第一部分《IT基础知识》&#xff08;1/10&#xff09; 1.引言 2.第一部分&#xff1a;IT基础知识 2.1 计算机硬件 CPU&#xff1a;计算机的心脏 内存&#xff1a;数据的临时居所 存储设备&#xff1a;数据的长期仓库 输入输出设备&#xff1…

计算机毕业设计Python+Spark知识图谱酒店推荐系统 酒店评论情感分析 酒店价格预测系统 酒店可视化 酒店爬虫 neo4j知识图谱 深度学习

酒店评论爬虫模块主要为如下酒店推荐系统提供酒店、房间、评论采集与情感分析&#xff0c;牛逼系统如下&#xff1a; 创新点10个全程吊打摩擦导师&#xff1a;neo4j知识图谱、预测算法、推荐算法(4种机器学习 深度学习 如协同过滤基于用户、基于物品、神经网络混合CF推荐算法ML…