awk文档

news/2024/10/18 12:02:33

awk笔记

简介

Awk 是一种用于处理数据和生成报告的脚本语言。awk 命令编程语言不需要编译,并允许用户使用变量、数字函数、字符串函数和逻辑运算符。

Awk 是一个实用程序,它使程序员能够以语句的形式编写简短但有效的程序,这些语句定义要在文档的每一行中搜索的文本模式以及在行中找到匹配项时要采取的操作。Awk 主要用于模式扫描和处理。它搜索一个或多个文件以查看它们是否包含与指定模式匹配的行,然后执行相关操作。

Awk 是开发者的名字的缩写 – Aho、Weinberger 和 Kernighan。

我们可以用 AWK 做什么?

  1. AWK 操作:
    (a)逐行扫描文件
    (b)将每个输入行拆分为字段
    (c)将输入行/字段与模式进行比较
    (d)对匹配的行执行操作
  2. 用途:
    (a)转换数据文件
    (b)生成格式化报告
  3. 编程结构:
    (a)格式化输出行
    (b)算术和字符串运算
    (c)条件和循环

代码

结构

awk awk一些设置 '选择 _某些条件 {操作行为 }' 输入文件 > 输出文件

打印所有行

假如employee.txt ​文件内容如下

ajay manager account 45000
sunil clerk account 25000
varun manager sales 50000
amit manager account 47000
tarun peon sales 15000
deepak clerk sales 23000
sunil peon sales 13000
satvik director purchase 80000 

执行命令将打印

awk '{print}' employee.txt

输出

ajay manager account 45000
sunil clerk account 25000
varun manager sales 50000
amit manager account 47000
tarun peon sales 15000
deepak clerk sales 23000
sunil peon sales 13000
satvik director purchase 80000 

打印匹配的行

选择带有manager​的一行

awk '/manager/ {print}' employee.txt 

输出

ajay manager account 45000
varun manager sales 50000
amit manager account 47000 

打印特定单词

要打印ajay 45000​类似的样式,如果该行有 4 个单词(又称字段、片段),则分别存储在 \undefined、\undefined 中

另外,$0 代表整行

awk '{print $1,$4}' employee.txt 

输出

ajay 45000
sunil 25000
varun 50000
amit 47000
tarun 15000
deepak 23000
sunil 13000
satvik 80000 

打印特定单词附内置变量

  • NR:行号

    NR 命令保存当前输入记录的数量。请记住,记录通常是行。Awk 命令对文件中的每个记录执行一次模式/操作语句。

  • NF: 每行的最后一个单词

    NF 命令会统计当前输入记录中的字段数量。(每行的单词总数?)

  • FS: FS 命令包含字段分隔符,用于在输入行上划分字段。默认为“空白”,即空格和制表符。可以将 FS 重新分配给另一个字符(通常在 BEGIN 中)以更改字段分隔符。

  • RS: RS 命令存储当前记录分隔符。由于默认情况下,输入行是输入记录,因此默认的记录分隔符是换行符。

  • OFS: OFS 命令存储输出字段分隔符,Awk 打印字段时会用该分隔符分隔字段。默认为空格。每当 print 有多个用逗号分隔的参数时,它会在每个参数之间打印 OFS 的值。

  • ORS: ORS 命令存储输出记录分隔符,Awk 打印输出行时,它会分隔输出行。默认为换行符。print 会自动将 ORS 的内容输出到打印内容的末尾。

输出NR

这里的NR起到行号作用

awk '{print NR,$0}' employee.txt 

输出

1 ajay manager account 45000
2 sunil clerk account 25000
3 varun manager sales 50000
4 amit manager account 47000
5 tarun peon sales 15000
6 deepak clerk sales 23000
7 sunil peon sales 13000
8 satvik director purchase 80000 

输出第3~6行

awk 'NR==3, NR==6 {print NR,$0}' employee.txt 

输出

3 varun manager sales 50000
4 amit manager account 47000
5 tarun peon sales 15000
6 deepak clerk sales 23000 
输出NF

NF为每行的最后一个字段

awk '{print $1,$NF}' employee.txt 

输出

ajay 45000
sunil 25000
varun 50000
amit 47000
tarun 15000
deepak 23000
sunil 13000
satvik 80000 

打印特定文本

假如cat > geeksforgeeks.txt​输出为

A    B    C
Tarun    A12    1
Man    B6    2
Praveen    M42    3

打印用-分隔的行号

awk '{print NR "- " $1 }' geeksforgeeks.txt 

输出

1 - A
2 - Tarun
3 – Manav  
4 - Praveen

打印特定列

awk '{print $2}' geeksforgeeks.txt 

输出

B
A12
B6
M42

打印非空行

NF 应该不小于 0,并且用户还必须打印行号

awk 'NF <= 0 {print NR}' geeksforgeeks.txt

查找最长的行

查找哪个行最长以及行的长度

awk '{ if (length($0) > max) max = length($0) } END { print max }' geeksforgeeks.txt

输出

19

打印匹配项的所有行数

awk 'END { print NR }' geeksforgeeks.txt 

输出

4

image

打印超过10个字符的行

awk 'length($0) > 10' geeksforgeeks.txt 

输出

Tarun    A12    1
Praveen    M42    3

查找特定列的任意字符串

输出第3列的单词相当于B6​的每行

awk '{ if($3 == "B6") print $0;}' geeksforgeeks.txt

输出

# 无输出

打印1~n的第一个数值的平方

打印到1~6的平方

awk 'BEGIN { for(i=1;i<=6;i++) print "square of", i, "is",i*i; }' 

square of 1 is 1
square of 2 is 4
square of 3 is 9
square of 4 is 16
square of 5 is 25
square of 6 is 36

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

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

相关文章

Python 设置 session 或 cookie 增、删、改、查键值

前言全局说明Python 设置 session 或 cookie 键值一、说明 在实际使用中 session 和 cookie 里存放键值,是指不同的位置,session 的内容存在内存中, 而 cookie 是一个为 .cookie的文件。 这里只为了演示键值的增加,不用过多关注 session 和 cookie 区别二、增加键值 2.1 使…

Java多线程生成波场靓号

​玩区块链,手上没靓号怎么行。用网上的靓号生成器有一定的风险性,思来想去决定自己写一个。首先需要导入波场官方编辑<!-- 引用本地Maven仓库--><dependency><groupId>org.tron.trident</groupId><artifactId>utils</artifactId>…

Ubuntu20.04安装OpenCV3(图解亲测)

1. 下载opencv与安装cmake 1.1安装cmake 终端执行下面语句,安装cmake sudo apt-get install cmake 1.2 安装依赖环境点击查看代码 sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev sudo apt-get…

vue3.4的更新,保证你看的明明白白

defineModel 同学已经转正 defineModel 在vue3.3中还是一个实验性功能, 但是经过一个学期的努力,该同学已经转正。defineModel的简单介绍 defineModel() 返回的值是一个 ref。 它可以像其他 ref 一样被访问以及修改。 它能起到在父组件和当前变量之间的双向绑定的作用。 它的 .…

微服务架构进化论以及如何学习Spring Cloud

微服务架构进化论以及如何学习Spring Cloud一、微服务架构进化论1. 单体应用阶段所有功能模块和组件都在一个单一的代码库中构建和部署。整个应用程序作为一个整体进行开发、测试和部署。 2. 垂直应用阶段(nginx负载均衡)垂直架构是指将单体架构中的多个模块拆分为多个独立…

服务器神秘挂起:一场惊心动魄的内核探案

2024年6月17日,我们的运维团队突然收到了一连串的告警。监控大屏上,代表着不同 Sealos 可用区的绿点中,零星地闪烁起了一两个红点。 “奇怪,怎么有几台服务器突然 hang 住了?” 值班的小辉皱起了眉头。 这次故障的诡异之处在于它的随机性。并非所有节点都受到影响,而是在…

2024年6月上半月30篇大语言模型的论文推荐

大语言模型(LLMs)在近年来取得了快速发展。本文总结了2024年6月上半月发布的一些最重要的LLM论文,可以让你及时了解最新进展。 LLM进展与基准测试 1、WildBench: Benchmarking LLMs with Challenging Tasks from Real Users in the WildWildBench是一个自动评估框架,使用具…

k8s监控指标整改のthanos转VictoriaMetrics

一、问题背景 目前thanos已经稳定在线上运行了5年了,随着集群的数量越来越多,数据量也是水涨船高,大得惊人,查询时延需要5s以上。 通过对比各种开源时序数据库,选择了VictoriaMetrics,以为特定需求的用户提供最合适的解决方案。 以下是性能比较二、整体架构 跟官方推荐架…