Linux三剑客-awk

devtools/2024/11/29 9:26:33/

一、什么是awk

awk 是一个强大的文本处理工具,它在 Unix 和类 Unix 系统中广泛使用。awk 可以处理文本文件,提取信息,进行模式匹配和文本替换等操作。

二、awk的语法

1.基本语法

awk [options] 'pattern { action }' file
选项参数说明:
  • options:是一些选项,用于控制 awk 的行为。
  • pattern:指定一个条件,只有当这个条件为真时,awk 才会执行后面的 action
  • action:当 pattern 条件满足时,awk 执行的一系列命令。
  • file:要处理的文件。

(1)options 参数说明:

  • -F <分隔符>--field-separator=<分隔符>: 指定输入字段的分隔符,默认是空格。使用这个选项可以指定不同于默认分隔符的字段分隔符。

  • -v <变量名>=<值>: 设置 awk 内部的变量值。可以使用该选项将外部值传递给 awk 脚本中的变量。

  • -f <脚本文件>: 指定一个包含 awk 脚本的文件。这样可以在文件中编写较大的 awk 脚本,然后通过 -f 选项将其加载。

  • -V--version: 显示 awk 的版本信息。

  • -h--help: 显示 awk 的帮助信息,包括选项和用法示例。

(2)内置变量

  • $1, $2, ...:当前行的第1、2、...个字段。
  • $0:所有行
  • NF:当前行的字段总数。
  • NR:当前处理的是第几行。
  • FS:字段分隔符,默认为空格或制表符。
  • RS:记录分隔符,默认为换行符。

2.基本用法

    (1)打印特定字段

awk '{print $1}' file.txt

打印 file.txt 文件中每一行的第一个字段。

    (2)打印特定行

awk 'NR==5' file.txt

只打印 file.txt 文件的第5行。

    (3)基于条件打印

awk '$1 > 10' file.txt

打印 file.txt 中第一个字段大于10的所有行。

3.使用字段和变量

    (1)字段赋值

awk '{ $1 = $1 + 1 }1' file.txt

将每一行的第一个字段值增加1。

    (2)使用变量

awk '{ sum += $1 } END { print sum }' file.txt

计算 file.txt 中所有行的第一个字段的总和,并在处理完所有行后打印出来。

4.模式和动作

  (1)模式匹配

awk '/pattern/ { print $0 }' file.txt

打印包含 "pattern" 的所有行。

    (2)多个模式

awk '/start/,/end/' file.txt

打印从包含 "start" 的行到包含 "end" 的行之间的所有行。

5.字符串处理

    (1)字符串替换

awk '{gsub("old", "new", $0); print}' file.txt

file.txt 中每一行的 "old" 替换为 "new" 并打印。

    (2)字段分割

awk -F':' '{print $1}' file.txt

使用冒号作为字段分隔符,并打印每一行的第一个字段。

6.高级用法

    (1)数组

awk '{arr[$1]++} END {for (i in arr) print i, arr[i]}' file.txt

统计 file.txt 中每一行的第一个字段出现的次数,并打印出来。

    (2)函数

awk '{print sqrt($1)}' file.txt

计算 file.txt 中每一行的第一个字段的平方根并打印。

    (3)嵌套 awk

awk '{print; print $0}' file.txt | awk 'NR%2==1'

打印 file.txt 的每一行,然后再次打印每一行,但只打印奇数行。

    (4)使用外部命令

awk '{system("echo " $1)}' file.txt

file.txt 中每一行的第一个字段执行 echo 命令。

    (5)多文件处理

awk 'NR==FNR {a[$1]=$2; next} $1 in a {print $0, a[$1]}' file1.txt file2.txt

7.awk运行处理规则的执行流程

(1) BEGIN{ } : 最开始执行

(2)/ / : 正则

(3){ } : 循环体

(4)END{ } :

最后执行 这里面最少有一个,最多有四个!


http://www.ppmy.cn/devtools/137882.html

相关文章

CTF-WEB: 2024强网杯青少年专项赛 ezFindShell writeup

打开直接下载www.zip 通过百度网盘分享的文件&#xff1a;ezFindShell.zip 链接&#xff1a;https://pan.baidu.com/s/1JQjOk-qxaOf0s4f3Fgww7w?pwd1111 提取码&#xff1a;1111 --来自百度网盘超级会员V2的分享使用阿里webshell进行检测,找到可利用文件,或者直接全全局搜索…

EasyPlayerPro播放本地MP4视频

加载本地mp4需指定协议http://localhost:5100/&#xff08;如 http:、https:、webrtc:、ws: 等&#xff09;来正确处理媒体流。 目录结构 ├── public/ │ ├──static │ │ ├── video.mp4 ├── components/ │ ├── EasyWebRTC.vue ├── views/ │ ├─…

网络原理->DNS协议和NAT协议解

前言 大家好我是小帅&#xff0c;今天我们来了解应用层的DNS协议和NAT技术 个人主页&#xff1a;再无B&#xff5e;U&#xff5e;G 文章目录 1.重要应⽤层协议DNS(Domain Name System)1.1 DNS背景 2. NAT技术3. 总结 1.重要应⽤层协议DNS(Domain Name System) DNS是⼀整套从域…

基于Qt实现的自定义树结构容器:设计与应用

在Qt框架中&#xff0c;尽管其提供了许多强大的容器类&#xff08;如 QList, QMap, QTreeWidget 等&#xff09;&#xff0c;但缺少一个通用的、灵活的树结构容器&#xff0c;直接支持多层级数据管理。为了满足这些需求&#xff0c;本文设计并实现了一个可复用的自定义树结构容…

Opencv+ROS实现摄像头读取处理画面信息

一、工具 ubuntu18.04 ROSopencv2 编译器&#xff1a;Visual Studio Code 二、原理 图像信息 ROS数据形式&#xff1a;sensor_msgs::Image OpenCV数据形式&#xff1a;cv:Mat 通过cv_bridge()函数进行ROS向opencv转换 cv_bridge是在ROS图像消息和OpenCV图像之间进行转…

Spring Events 最新详解(spring4.2前后变化)

事件驱动设计模式&#xff0c;也可能通过Spring来实现。 围绕事件的三个角色&#xff1a; 事件&#xff08;Event&#xff09;事件发布者&#xff08;Publisher&#xff09;事件监听者&#xff08;Listener&#xff09; 文章内容&#xff1a; Spring Event.jpg 1. Demo-01:…

15 go语言(golang) - 并发编程goroutine原理及数据安全

底层原理 Go 的 goroutine 是一种轻量级的线程实现&#xff0c;允许我们在程序中并发地执行函数。与传统的操作系统线程相比&#xff0c;goroutine 更加高效和易于使用。 轻量级调度 用户态调度&#xff1a;Go 运行时提供了自己的调度器&#xff0c;这意味着 goroutine 的创建…

C++:探索哈希表秘密之哈希桶实现哈希

文章目录 前言一、链地址法概念二、哈希表扩容三、哈希桶插入逻辑四、析构函数五、删除逻辑六、查找七、链地址法代码实现总结 前言 前面我们用开放定址法代码实现了哈希表&#xff1a; C&#xff1a;揭秘哈希&#xff1a;提升查找效率的终极技巧_1 对于开放定址法来说&#…