当前位置: 首页 > news >正文

Linux文本处理三剑客之awk命令

官方文档:https://www.gnu.org/software/gawk/manual/gawk.html

什么是awk?

Awk是一种文本处理工具,它的名字是由其三位创始人(Aho、Weinberger和Kernighan)的姓氏首字母组成的。Awk的设计初衷是用于处理结构化文本数据,它提供了强大的模式匹配和数据提取功能。

Awk的工作方式是逐行扫描输入文本文件,并对每一行应用一组用户定义的规则。这些规则由模式-动作对构成,当文本行匹配某个模式时,对应的动作将被执行。Awk将输入文本自动分割成字段(默认以空格作为分隔符),可以方便地对字段进行操作和处理。

语法格式

awk 'pattern { action }' input_file
  • `pattern`是用于匹配文本行的条件。可以是正则表达式、比较表达式、逻辑表达式等。如果省略pattern,则默认匹配所有行。
  • `{ action }`是在匹配成功时执行的动作块。可以是一条或多条语句,用花括号 {} 包围。如果省略动作块,将默认执行打印整行的操作。
  • `input_file`是要处理的输入文件。如果省略此参数,则从标准输入读取数据。

常见要点

字段和字段分隔符:

  • 默认情况下,Awk将每一行分割成多个字段,字段之间以空格或制表符作为分隔符。
  • 可以使用`-F`选项指定不同的字段分隔符。例如,`-F ','`表示使用逗号作为分隔符。
  • 可以使用`$1``$2`等表示第1、第2个字段,`$0`表示整行。

内置变量:

  • `NR`表示当前处理的行数。
  • `NF`表示当前行的字段数量。
  • `FNR`表示当前文件中的行数。
  • `FILENAME`表示当前处理的文件名。

控制流语句:

  • `if-else`条件语句:根据条件执行不同的动作。
  • `for`循环语句:迭代执行一系列动作。
  • `while`循环语句:在满足条件的情况下重复执行一系列动作。
  • `do-while`循环语句:先执行一系列动作,然后根据条件重复执行。

内置函数:

Awk提供了许多内置函数,可用于字符串处理、数学运算、日期处理等。例如:`length()``substr()``tolower()``toupper()``sin()``cos()`等。

输出打印:

  • 使用`print`语句将结果输出到标准输出。可以打印文本、变量、表达式等。
  • 使用`printf`函数以格式化的方式打印输出。

示例

-- 使用Awk来统计文件中的行数:
awk '{ count++ } END { print count }' input.txt-- 使用Awk计算一个CSV文件中某一列的总和:
awk -F ',' '{ sum += $3 } END { print sum }' data-- 使用Awk从日志文件中提取特定时间段内的日志记录:
awk '/Jun 15 10:30:00/, /Jun 15 11:00:00/' access.log-- 使用Awk计算一个文本文件中每个单词的出现次数:
awk '{ for(i=1; i<=NF; i++) count[$i]++ } END { for(word in count) print word, count[word] }' text.txt-- 使用正则表达式匹配包含数字的行:
awk '/[0-9]+/' input.txt-- 计算每行字段数量,并打印行号和字段数量:
awk -F ',' '{ print "Line", NR, "has", NF, "fields" }' data.csv-- 打印文件名和行号:
awk '{ print "File:", FILENAME, "Line:", NR, $0 }' file1.txt file2.txt-- 使用`if-else`条件语句来根据条件执行不同的动作:
awk '{ if ($1 > 10) print $1, "is greater than 10"; else print $1, "is less than or equal to 10" }' data.txt-- 使用`for`循环语句打印九九乘法表:
awk 'BEGIN { for(i=1; i<=9; i++) { for(j=1; j<=i; j++) printf("%d*%d=%d ", j, i, i*j); print "" } }'-- 使用`length()`函数获取每行的字符数:
awk '{ print "Line", NR, "has", length($0), "characters" }' data.txt-- 使用`substr()`函数截取字段的子字符串:
awk -F ',' '{ print "Name:", $1, "Initials:", substr($1, 1, 1) substr($2, 1, 1) }' names.csv-- 使用`print`语句打印文本和变量:
awk '{ name = $1; age = $2; print "Name:", name, "Age:", age }' data.txt-- 使用`printf`函数以格式化的方式打印输出:
awk '{ printf "Name: %-10s Age: %2d\n", $1, $2 }' data.txt-- 删除temp文件的重复行
awk '!($0 in array) { array[$0]; print }' temp-- 查看最长使用的10个命令
awk '{print $1}' ~/.bash_history | sort | uniq -c | sort -rn | head -n 10-- 查看机器的ip列表
ifconfig -a | awk '/Bcast/{print $2}' | cut -c 5-19-- 查看机器的每个远程链接机器的连接数
netstat -antu | awk '$5 ~ /[0-9]:/{split($5, a, ":"); ips[a[1]]++} END {for (ip in ips) print ips[ip], ip | "sort -k1 -nr"}'-- 查看某个进程打开的socket数量
ps aux | grep [process] | awk '{print $2}' | xargs -I % ls /proc/%/fd | wc -l-- 批量重命名文件
find . -name '*.jpg' | awk 'BEGIN{ a=0 }{ printf "mv %s name%01d.jpg\n", $0, a++ }' | bash-- 查看某个用户打开的文件句柄列表
for x in `ps -u 500 u | grep java | awk '{ print $2 }'`;do ls /proc/$x/fd|wc -l;done-- 计算文件temp的第一列的值的和
awk '{s+=$1}END{print s}' temp-- 查找某个时间戳的文件列表
cp -p `ls -l | awk '/Apr 14/ {print $NF}'` /usr/users/backup_dir-- 格式化输出当前的进程信息
ps -ef | awk -v OFS="\n" '{ for (i=8;i<=NF;i++) line = (line ? line FS : "") $i; print NR ":", $1, $2, $7, line, ""; line = "" }'-- 查看输入数据的特定位置的单个字符
echo "abcdefg"|awk 'BEGIN {FS="''"} {print $2}'-- 打印当前的ssh客户端
netstat -tn | awk '($4 ~ /:22\s*/) && ($6 ~ /^EST/) {print substr($5, 0, index($5,":"))}'-- 打印文件第一列不同值的行
awk '!array[$1]++' file.txt-- 打印第二列唯一值
awk '{ a[$2]++ } END { for (b in a) { print b } }' file-- 查看系统所有分区
awk '{if ($NF ~ "^[a-zA-Z].*[0-9]$" && $NF !~ "c[0-9]+d[0-9]+$" && $NF !~ "^loop.*") print "/dev/"$NF}'  /proc/partitions-- 查看2到100所有质数
for num in `seq 2 100`;do if [ `factor $num|awk '{print $2}'` == $num ];then echo -n "$num ";fi done;echo-- 查看第3到第6行
awk 'NR >= 3 && NR <= 6' /path/to/file

分享、在看与点赞
只要你点,我们就是胖友

来自: Linux文本处理三剑客之awk命令icon-default.png?t=N7T8https://mp.weixin.qq.com/s?__biz=Mzk0NTQ3OTk3MQ==&mid=2247487424&idx=1&sn=53c4b2333d8e6e42831ad1e362040251&chksm=c315878cf4620e9abca074f1c66d97750c0587b487c51df45d41e664ceb7435ebbfe3869fae9&token=355315523&lang=zh_CN#rd

相关文章:

Linux文本处理三剑客之awk命令

官方文档&#xff1a;https://www.gnu.org/software/gawk/manual/gawk.html 什么是awk&#xff1f; Awk是一种文本处理工具&#xff0c;它的名字是由其三位创始人&#xff08;Aho、Weinberger和Kernighan&#xff09;的姓氏首字母组成的。Awk的设计初衷是用于处理结构化文本数…...

公差和配合

配合的选择&#xff1a; 配合特性以及基本偏差的应用&#xff1a; 常用优先配合特性及选用举例 为什么一般情况下选用基孔制而不用基轴制&#xff1a; 优先采用基孔制的原因主要包括工艺性、经济性和标准化&#xff1a; 工艺性。加工孔比加工轴更难&#xff0c;因为孔…...

AI大模型应用开发实践:5.快速入门 Assistants API

快速入门 Assistants API Assistants API 允许您在自己的应用程序中构建人工智能助手。一个助手有其指令,并可以利用模型、工具和知识来回应用户查询。 Assistants API 目前支持三种类型的工具: 代码解释器 Code Interpreter检索 Retrieval函数调用 Function calling使用 P…...

stack和queue的模拟实现

文章目录 如何实现&#xff1f;实现stack实现queue总结 如何实现&#xff1f; 首先我们看看官网上的stack&#xff0c;官网上的stack是用deque作为模版的缺省值去实现的&#xff0c;deque是什么&#xff1f; deque其实就是双端队列&#xff0c;双端队列&#xff0c;顾名思义&am…...

你的手机是如何控制你的手表之广播篇

前言 要让手机能够控制手表&#xff0c;第一步当然要让手机能够“看见”手表&#xff0c;人类作为上帝视角&#xff0c;我们是能够通过眼睛直接看见手机和手表的&#xff0c;但要让手机“看见”手表&#xff0c;就需要一端把自己的信息通过电磁波的形式发往空中&#xff0c;另…...

深入理解并发之LongAdder、DoubleAdder的实现原理

深入理解LongAdder、DoubleAdder的实现原理 本文主要通过LongAdder和DoubleAdder的源码&#xff0c;讲述一下其实现原理。通过LongAdder和DoubleAdder的源码可知。两者都是继承了Striped64的类。下面我们将通过源码的形式讲述一下这三个类都做了哪些事情。 1: Striped64 ​ …...

virtuoso原理图无法编辑

(SCH-1217): Could not open "XX schematic" for edit. (because it is locked by user XX on XX) Would you like to open it for read? 解决方法&#xff1a; 到工程目录的schematic文件夹下找到sch.oa.cdslck.RHEL30.XXX-eda.21423和sch.oa.cdslck全部删掉即可正…...

Kotlin协程中的作用域 `GlobalScope`、`lifecycleScope` 和 `viewModelScope`

Kotlin协程中的作用域 Kotlin协程提供了多种作用域来管理协程的生命周期&#xff0c;其中最常见的是 GlobalScope、lifecycleScope 和 viewModelScope。 1. GlobalScope GlobalScope 是一个全局作用域&#xff0c;不受任何其他生命周期的限制。这意味着在 GlobalScope 中启动…...

leetcode739 每日温度

题目 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来代替。 示例 输入: tempe…...

【软件测试】自动化测试如何管理测试数据

前言 在之前的自动化测试框架相关文章中&#xff0c;无论是接口自动化还是UI自动化&#xff0c;都谈及data模块和config模块&#xff0c;也就是测试数据和配置文件。 随着自动化用例的不断增加&#xff0c;需要维护的测试数据也会越来越多&#xff0c;维护成本越来越高&#…...

Llama 3-V: 比GPT4-V小100倍的SOTA

大模型技术论文不断&#xff0c;每个月总会新增上千篇。本专栏精选论文重点解读&#xff0c;主题还是围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调重新阅读。而最新科技&#xff08;Mamba&#xff0c;xLSTM,KAN&#xff09;则提供了大模…...

Anaconda安装配置

Anaconda下载&#xff1a; 网盘下载&#xff1a;https://pan.quark.cn/s/c5663477ccef 配置环境变量&#xff1a; 以管理员身份运行命令提示符 setx /M PATH "%PATH%;C:\ProgramData\anaconda3;C:\ProgramData\anaconda3\Scripts;C:\ProgramData\anaconda3\Library\bi…...

全面理解渗透测试

揭秘网络安全的秘密武器&#xff1a;全面理解渗透测试 在数字化时代&#xff0c;网络安全已成为人们关注的焦点。网络攻击和数据泄露事件频发&#xff0c;给个人、企业和国家带来了巨大的损失。为了应对这一挑战&#xff0c;渗透测试作为一种重要的网络安全评估手段&#xff0…...

「网络编程」基于 UDP 协议实现回显服务器

&#x1f387;个人主页&#xff1a;Ice_Sugar_7 &#x1f387;所属专栏&#xff1a;计网 &#x1f387;欢迎点赞收藏加关注哦&#xff01; 实现回显服务器 &#x1f349;socket api&#x1f349;回显服务器&#x1f34c;实现&#x1f95d;服务器&#x1f95d;客户端 &#x1f3…...

云数融合与大数据技术在日常生活中的创新应用探索

前言 移动云模型服务产品在中国移动旗下主要包括云计算、大数据、人工智能等服务&#xff0c;它依托广泛的算力资源(4N31X)、丰富的网络接入资源和高品质云专网&#xff0c;实现算网端资源一站式开通&#xff0c;构建企业级一体化解决方案。 文章目录 前言云计算的日常应用智…...

ETCD 备份与还原

安装etcdctl 准备看下etcd如何命令行操作&#xff0c;才发现&#xff0c;主机上&#xff0c;只用kubeadm拉起了etcd&#xff0c;但没有etcdctl命令。 # sudo docker ps -a | awk /etcd-master/{print $1} c4e3a57f05d7 26a11608b270 836dabc8e254 找到正在运行的etcd&#xf…...

LeeCode 1787 DP

题意 传送门 LeeCode 1787 使所有区间的异或结果为零 题解 任一个元素都至多对 k k k个长度为 k k k的区间产生影响&#xff0c;故难以直接依次处理每一个元素。 观察到满足条件的数组中模 k k k意义下索引相等的各个元素相同&#xff0c;故可以依次处理每一个同余类。 d p…...

如何有效屏蔽手机上的骚扰电话20240530

如何有效屏蔽手机上的骚扰电话 引言 最近&#xff0c;我的手机经常接到954开头的7位数字座机电话&#xff0c;这些骚扰电话让我非常困扰。由于我经常点外卖&#xff0c;无法屏蔽所有陌生号码&#xff0c;因此需要一个既能屏蔽特定前缀的骚扰电话&#xff0c;又不影响日常生活…...

Linux CGroup资源限制(概念限制进程CPU使用)

Linux CGroup资源限制&#xff08;详解&#xff09; 最近客户认为我们程序占用cpu过高&#xff0c;希望我们限制&#xff0c;排查之后发现是因为程序频繁gc导致&#xff0c;为了精细化、灵活的的限制&#xff0c;想到了使用Linux CGroup。 0 前置知识 ①概念及作用 官网&#…...

Latex中标注通讯作者

** 直接使用脚注&#xff0c;不用添加宏包 多个同地址的并列&#xff0c;建议加点空格&#xff0c;好看一些 ** \title{xxxxxxxxxxxxxxxxxxx}\author{xxxxxxxxxxxxxxxxxxx\footnote{Corresponding author} ,bbbbbbbbbbbbbbbbbbb}\address{xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文通过代码驱动的方式&#xff0c;系统讲解PyTorch核心概念和实战技巧&#xff0c;涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...

数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !

我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...