【Linux】gawk编辑器

一、基本介绍

相较于sed编辑器来说,gawk提供了一种编程语言,而不仅仅是编辑器命令。

在gawk编程语言中,可以实现以下操作:

  1. 定义变量来保存数据;
  2. 使用算术和字符串运算符来处理数据;
  3. 使用结构化编程语法(如:if-then语句和循环)为数据处理添加处理的逻辑;
  4. 提取文件中的数据将其重新排列组合,最后生成格式化报告。

gawk的报告生成能力多用于从大文本文件中提取数据并将其格式化为可读性报告,最完美的应用案例就是格式化日志文件,gawk能从日志文件中过滤出所需的数据,并将其格式化,以便于阅读。

格式:

gawk options program file

gawk选项
-F fs指定行中划分数据字段的字段分隔符
-f file从指定文件中读取gawk脚本代码
-v var=value定义gawk脚本中的变量及其默认值
-L [keyword]指定gawk的兼容模式或警告级别

1、从命令行中读取gawk脚本

gawk脚本用一对花括号定义,必须将脚本命令放到一对花括号({})之间。由于gawk命令行假定脚本是单个文本字符串,所以还必须将脚本放到单引号中。

gawk '{print "hello world"}'

由于没有在命令行中指定文件名,所以gawk程序会从STDIN接收数据,在上面的脚本运行时,它就会一直等待来自STDIN的文本。

用户需要输入一行文本并按Enter键,这样gawk才会对这行文本执行一遍脚本。由于此脚本设为显示一行固定的字符串,因此不管在数据流中输入什么文本,都会得到同样的输出。如下所示:

要终止这个gawk程序,就必须表明数据量已经结束。bash shell提供了Ctrl+D组合键来生成EOF(end-of-file)字符,通过使用它便可以终止gawk程序并返回到命令行界面。 

2、使用数据字段变量

gawk编辑器在处理文本文件中的数据时,会自动为每一行的各个数据元素分配一个变量。

默认情况下,gawk会将下列变量分配给文本行中的数据字段。

$0:代表整个文本行;

$1:代表文本行中的第一个数据字段;

$2:代表文本行中的第二个数据字段;

$n:代表文本行中的第n个数据字段

文本行中的数据字段是通过字段分隔符划分的。在读取一行文本时,gawk会用预先定义好的字段分隔符划分出各个数据字段。默认情况下,字段分隔符是任意的空白字符(如,空格,制表符)

# 显示第一个数据字段
gawk '{print $1}' test.txt

使用 -F 选项指定其它的字段分隔符:-F,

# 用中文逗号作为字段分隔符
gawk -F, '{print $1}' test.txt

3、在gawk脚本中使用多条命令

 在shell脚本中使用多条命令,只需在命令之间加分号即可。

# $4将第4个字段赋值成Wen,然后打印出整条语句
echo "My name is Ning" | gawk '{$4="Wen"; print $0}'

也可以使用次提示符一次一行地输入脚本命令。因为没有在命令行中指定文件名或文本,所以,gawk程序会从STDIN中获取数据,当运行它的时候,它就会等着读取来自STDIN输入的文本。如果要退出的话,只需同时按下Crtl+D组合键表明数据已结束即可。

4、从文件中读取脚本

 和sed编辑器一样,可以将gawk脚本放入文件中,然后在命令行中引用脚本。

可以在脚本中写上多条命令,一行写一条,不需要分号。

text的赋值不能使用单引号;在gawk中,引用变量无须像在shell脚本中的那样使用没有符号。

5、在处理数据前运行gawk脚本

 有时候,需要在处理数据前就运行gawk脚本,比如为报告创建一个标题。这时,需要用到BEGIN关键字,它会强制gawk在读取数据前执行BEGIN关键字之后指定的脚本。

gawk 'BEGIN {print "城市名:"};{print $0}' test.txt

 6、在处理数据后运行gawk脚本

END关键字允许指定一段脚本,在处理完数据后执行。可以用于给报告添加页脚。

7、小型gawk脚本文件

创建一个gawk脚本文件。

BEGIN {
print "*****最新的用户和Shell清单*****"
print "用户ID   \t Shell"
print "------- \t -------"
FS=":"
}

{
print $1 "           \t  " $7
}

END {
print "*****已总结完毕*****"
}
gawk -f lnn.gawk /etc/passwd | more

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Backend - C# asp .net core

目录 一、各大框架理解 (一)ASP.NET Core (二)ASP.NET Core Web Application (三)ASP.NET Core MVC (四)ASP.NET Core Web API (五)ASP.NET Core 和 EF …

麦田物语学习笔记:背包物品选择高亮显示和动画

如题,本篇文章没讲动画效果 基本流程 1.代码思路 (1)先用点击事件的接口函数去实现,点击后反转选择状态(isSelected),以及设置激活状态(SetActive),并且还需要判断该格子是否为空,空格子是点不动的,完成后以上后,出现的问题是高亮应该是有且仅有一个格子是高亮的,而现在可以让…

自定义音频播放样式结合Howler.js

滑动式滚动条 不使用audio默认样式 自定义音频播放样式 当前时间 开始时间 结束时间 可播放可暂停 滚动条可拖动进行同步 具体样式可调整npm install howler --save<template><div class"audio-player"><div v-if"isLoading" class"l…

基于 GEE 利用 DEM 数据计算坡度、坡向

目录 1 完整代码 2 运行结果 1 完整代码 以SRTM数据产品为例&#xff0c;代码如下&#xff1a; var roi table; var srtm ee.Image(USGS/SRTMGL1_003); var elevation srtm.select(elevation).clip(roi);// 计算坡度 var slope ee.Terrain.slope(elevation).clip(roi)…

Ubuntu 磁盘修复

Ubuntu 磁盘修复 在 ubuntu 文件系统变成只读模式&#xff0c;该处理呢&#xff1f; 文件系统内部的错误&#xff0c;如索引错误、元数据损坏等&#xff0c;也可能导致系统进入只读状态。磁盘坏道或硬件故障也可能引发文件系统只读的问题。/etc/fstab配置错误&#xff0c;可能…

夯实前端基础之CSS篇

知识点概览 这一篇是讲CSS的&#xff0c;前面还有一篇总结HTML的哦~夯实前端基础之HTML篇&#xff0c;后面还会更新其他系列哦~ 一、必知必会 1. html中引入样式的几种方式&#xff1f; 内联样式&#xff08;html元素的style属性&#xff09;内部样式表&#xff08;style标签…

conda/pip基本常用命令理解与整理

最近配置了两轮pytorch环境&#xff0c;由于要频繁用到各种conda和pip命令&#xff0c;所以再此整理一下。 文章目录 前言&#xff1a;conda虚拟环境总结与解读Conda和pip的理解区别和联系命令格式 conda环境命令查看创建和删除导出与导入激活和退出 包管理命令安装和删除文件批…

协方差矩阵

协方差矩阵是一个对称矩阵&#xff0c;用来描述多个随机变量之间的协方差关系。协方差反映了两个随机变量如何共同变化的趋势&#xff0c;协方差矩阵将这种关系扩展到了多维数据。 1. 定义 假设有一个 n 维随机向量 &#xff0c;协方差矩阵 Σ 定义为&#xff1a; 其中&#…

6 分布式限流框架

限流的作用 在API对外互联网开放的情况下&#xff0c;是无法控制调用方的行为的。当遇到请求激增或者黑客攻击的情况下&#xff0c;会导致接口占用大量的服务器资源&#xff0c;使得接口响应效率的降低或者超时&#xff0c;更或者导致服务器宕机。 限流是指对应用服务进行限制…

LINUX 下 NODE 安装与配置

一、官网地址&#xff1a; &#xff08;中文网&#xff09;https://nodejs.cn/ &#xff08;英文网&#xff09;https://nodejs.org/en/ 二、下载安装包 2.1、下载地址&#xff1a;下载 | Node.js 中文网 https://nodejs.cn/download/ 2.2、使用 wget 命令下载到linux 服务器…

Qt重写webrtc的demo peerconnection

整个demo为&#xff1a; 可以选择多个编码方式&#xff1a; cmake_minimum_required(VERSION 3.5)project(untitled LANGUAGES CXX) set(CMAKE_CXX_STANDARD 20) set(CMAKE_INCLUDE_CURRENT_DIR ON)set(CMAKE_AUTOUIC ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON)set(CMA…

el-tabs中tabs过多造成form表单输入的时候卡顿

这里写自定义目录标题 tabs过多造成的输入卡顿解决方案方案一方案二 出现的并发问题解决方案 tabs过多造成的输入卡顿 描述&#xff1a;前端要写一个需求&#xff0c;大概有一百多个tab渲染过来&#xff0c;每个tab中都是一个表单&#xff0c;这个时候数据渲染任务加重&#x…

【python/html/js 鼠标点选/框选图片内容】

html代码 注意修改图片地址&#xff0c;坐标会保存为coordinates.json <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0&q…

Zustand selector 发生 infinate loops的原因以及解决

Zustand selector 发生 infinate loops 做zustand tutorial project的时候&#xff0c;使用选择器方法引入store&#xff0c;出现Maximum update depth exceeded,也就是组件一直重新渲染&#xff0c;改成直接使用store就没有不会出现这个问题。如下&#xff1a; // const [xIs…

AngularJs指令中出错:Error: $compile:nonassign Non-Assignable Expression

Expression {resumeId: item.resumeId} used with directive rwdsDelete is non-assignable! 在AngularJS中&#xff0c;$compile服务用于将指令编译成HTML。当你在模板中使用了一个表达式&#xff0c;但这个表达式不是一个左值&#xff08;即不能被赋值的表达式&#xff09;时…

moviepy 将mp4视频文件提取音频mp3 - python 实现

DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#xff0c;持续增加中。 需要更多数据资源和技术解决方案&#xff0c;知识星球&#xff1a; “DataBall - X 数据球(free)” -------------------------------------------------------------…

openssl编译

关于windows下&#xff0c;openssl编译 环境准备 安装 perl:https://djvniu.jb51.net/200906/tools/ActivePerl5_64.rar安装nasm&#xff1a;https://www.nasm.us/pub/nasm/releasebuilds/2.13.01/win64/nasm-2.13.01-installer-x64.exe下载opensll源码&#xff1a;https://o…

QT c++ 样式 设置 标签(QLabel)的渐变色美化

上一篇文章中描述了按钮的纯色&#xff0c;本文描述标签的渐变色美化。 1.头文件 #ifndef WIDGET_H #define WIDGET_H #include <QWidget> //#include "CustomButton.h"#include <QVBoxLayout> #include <QLinearGradient> #include <QLabel…

学习打怪日记

目录 0 关于1 SpringBoot上传大文件抛出异常&#xff1a;MaxUploadSizeExceededException2 SpringBoot警告&#xff1a;HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl6221f160 (No operations allowed after connection closed.). Possibly …

xss-labs关卡记录15-20关

十五关 随便传一个参数&#xff0c;然后右击查看源码发现&#xff0c;这里有一个陌生的东西&#xff0c;就是ng-include。这里就是&#xff1a; ng-include指令就是文件包涵的意思&#xff0c;用来包涵外部的html文件&#xff0c;如果包涵的内容是地址&#xff0c;需要加引号。…