Linux中的awk命令

【Linux篇】awk命令详解 文章目录awk 命令1. 基本用法2. 工作流程3. 常用选项参数说明4. 实操案例5. 常用awk的内置变量6. awk程序的优先级 awk 命令 一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。 1. 基本用法 awk [选项参数] 'pattern1{action1} pattern2{action2}...' filename pattern:表示AWK在数据中查找的内容,就是匹配模式。action:在找到匹配内容时所执行的一系列命令。 注 阅读详情

awk,一种处理文本文件的语言,是一个强大的文本分析工具。叫 awk是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。awk对分割后的列处理,比较方便。

1. 基础语法

awk对文本进行逐行扫描并处理。awk中使用的命令也是awk自有的,而非linux中的。比如print。

awk内置变量在awk命令中使用时,不需要加$|

awk命令常见的几种形式:

awk '命令' 文件名
awk '查找模式 [命令]' 文件名 
awk [-F 域分割符] '命令' 文件名 # 默认域分割符是空格

上述'命令'都要用{}括起来,查找模式不需要。

常见运算符:

运算符描述
/str/str相当于是raw的,单独用于查找模式中时表示整行中要包含str,
= += -= *= /= %= ^= **=赋值
?:C条件表达式
||逻辑或
&&逻辑与
~ 和 !~匹配正则表达式和不匹配正则表达式,例:$1 ! /regexp/
< <= > >= != ==关系运算符
空格连接
+ -加,减
* / %乘,除与求余
+ - !一元加,减和逻辑非
^ ***求幂
++ --增加或减少,作为前缀或后缀
$字段引用
in数组成员

常见符号和指令:

命令含义
$0读入的整行内容
$NN大于0,按分割符分割后的第N列内容
print打印命令,pirnt a,b,c 打印时逗号被输出分割符替代
NRawk内置变量,当前行的行号。awk内置变量在awk命令中使用时,不需要加$
FSawk内置变量,输入域的分隔符,默认为空格,指定FS=":"等同于 -F :
OFSawk内置变量,输出域的分隔符,默认为空格,print打印时各列间的分割符
>重输出,awk '{print $1 >"t2.txt" }' t.txt
#样例
> cat awk.txt
Jack 1243 1971
Mike 3123 1980
Tom 3451 1990
> awk '{print $0}' awk.txt 
Jack 1243 1971
Mike 3123 1980
Tom 3451 1990
> awk '{print NR,$1,$3}' awk.txt 
1 Jack 1971
2 Mike 1980
3 Tom 1990


> awk '$2 ~ 1243' awk.txt 
Jack 1243 1971
> awk '$2 ~ 124355' awk.txt 
> awk '$1 ~ Jack' awk.txt #Jack当做变量赋值为空,所以都匹配
Jack 1243 1971
Mike 3123 1980
Tom 3451 1990
> awk '$1 ~ "Jack"' awk.txt  # 或  awk '$1 ~ /Jack/' awk.txt
Jack 1243 1971
> awk '$2 ~ "[0-9]*"' awk.txt
Jack 1243 1971
Mike 3123 1980
Tom 3451 1990
> awk '$2 ~ /[0-9]*/' awk.txt
Jack 1243 1971
Mike 3123 1980
Tom 3451 1990
> awk '/Jack/' awk.txt 
Jack 1243 1971
> awk '/"Jack"/' awk.txt #引号也被当做匹配字符,/str/直接的str相当于是raw的
> awk '/Jack/ {print $1,$3}' awk.txt 
Jack 1971

> awk -F: '{print $1,$7}' /etc/passwd
bin /bin/bash
daemon /bin/bash
> awk '{FS=":";OFS="#";print $1,$7}' /etc/passwd
bin#/bin/bash
daemon#/bin/bash

2. BEGIN和END模块

不管位置如何,BEGIN总是先执行,END总是最后执行。

'{命令}'增加模块:
'BEGIN{...} {命令} END{...}'

awk总是数据输入驱动的,如果仅运行 awk '{命令}' 则等待键盘输入,输入一行,命令执行一次。但如果命令中有且仅有BEGIN模块时,则不需要输入驱动。

> awk 'BEGIN{ print "Good Man"}'
Good Man

3. 流程控制语句

awk具有与C语言十分类似的控制流程功能,如if/else,while, do-whiel,for循环等。

# if 控制
awk '{if($3>1980){print $0}}' awk.txt

# while
awk '{while($3>1980){print $0;exit}}' akw.txt # 打印一个就退出

4. 数学计算

内置的一些数学函数时bash没有的。

名称返回值
exp(x)e的x次幂
int(x)x的整数部分
log(x)以e为底的x的对数
rand()0到1之间的随机数
srand(x)x是rand()的种子
sqrt(x)x的平方根
atan2(y,x)
cos(x)
sin(x)
> awk 'BEGIN{print int(15.2),sqrt(6)}'
15 2.44949

5. 字符串处理

awk提供了丰富的字符串处理函数,比较常见的有

函数名作用
index(str,substr)返回子串substr在str中第一次出现的位置
substr(str,k,m)返回str中从k到m位置的子串
length(str)返回str的长度
> awk 'BEGIN{print length(15.2)}' awk 'BEGIN{print length(15.2)}' #str加不加引号都可以
4
> awk 'BEGIN{print length("15.2")}'
4

6. 调用系统bash命令

awk可以通过system函数调用bash命令或脚本。print cmd | “/bin/bash”也可调用系统命令。

注意1:如果system()括号里面的参数没有加上双引号的话,awk认为它是一个变量,它会从awk的变量里面把它们先置换为常量,然后再回传给shell。

注意2:awk是新开一个shell,无论使用system()还是print cmd | “/bin/bash”,在相应的cmdline参数送回给shell,所以要注意当前shell变量与新开shell变量问题。要想在system中还想使用,则需要在awk外部用export。

# 例1
> awk 'BEGIN{system(date)}' # date当做变量,什么也不输出
> awk 'BEGIN{system("date")}'
Mon Oct 31 22:10:51 CST 2022
# 例2
> awk 'BEGIN{system("echo abc")}'
abc
> awk 'BEGIN{v1="echo";v2="abc";system(v1" "v2)}'
abc
> awk 'BEGIN{v1="echo";v2="abc";system(v1 v2)}' # 命令行没用空格
sh: echoabc: command not found
> awk 'BEGIN{v1=echo;v2=abc;system(v1" "v2)}' # echo和abc当做变量了
> awk 'BEGIN{abc="aaa";v1=echo;v2=abc;system("echo "v1" "v2)}'
aaa


# 例3. 解密a.txt中每一行数据
> awk '{cmd="./test decrypt "$0; system(cmd)}' a.txt  > b.txt 

# print
>  awk 'BEGIN{print "echo","abc"| "/bin/bash"}'
abc
>  awk 'BEGIN{print "echo","abc",";","echo","123"| "/bin/bash"}' # 注意分割多行命令的分号用双引号括起来
abc
123


# 作用域问题
> var=12345
> export var2=12345
# 基础验证
> awk 'BEGIN{print var}'

> awk 'BEGIN{print var2}' 
   --awk命令系统中,就没有var2这样一个变量
# 注意{var}和var的区别
>  awk 'BEGIN{system("echo $var")}'

> awk 'BEGIN{system("echo ${var}")}'

> awk 'BEGIN{system("echo $var2")}' 
12345 --awk的shell系统中,var2是存在的,且不用大括号也能识别
> awk 'BEGIN{system("echo ${var2}")}'
12345
> awk 'BEGIN{print "echo","$var"| "/bin/bash"}'

> awk 'BEGIN{print "echo","${var}"| "/bin/bash"}'

> awk 'BEGIN{print "echo","${var2}"| "/bin/bash"}'
12345
> awk 'BEGIN{print "echo","$var2"| "/bin/bash"}'
12345

7. awk命令脚本

同sed,awk也是可以将所有命令写在一个脚本文件中的:

awk -f awk脚本名

若在脚本第一行加上#!/bin/awk -f,则可直接运行脚本:

awk脚本名
Linux实用命令 awk命令 阅读详情

相关推荐

Linux运维实战:AWK用法详解

需要提醒的一点是,在实际使用过程中,建议根据具体需求查阅AWK相关文档,并灵活运用各种命令和函数,以达到更高效的数据处理效果。在这个例子中,“NR==FNR”表示正在处理第一个文件,“a[$0]=1”创建了一个名为“a”的数组,并将文件中的行作为关键字存储在该数组中。在这个例子中,我们首先遍历文件的每一行,然后对每一行中出现的单词进行计数,存储在数组count中。AWK是一种可以进行文本处理和分析的强大工具,尤其在Linux运维中,AWK的高级应用可以节省很多时间和精力。最后,使用print语句输出结果。

leibaiqing的专栏 2358

Linux - awk命令详解

目录1. awk命令1.1 awk工作原理1.2 awk语法1.2.1 awk完整语法示例:1.2.1 awk工作流程1.3 指定分隔符1.3.1 -F 指定分隔符1.3.2 指定输出分隔符2. free命令2.1 free命令各项含义 2.1.1 什么时候会使用交换分区?2.1.2 内核参数优化2.2 常用选项-m 以M为单位显示内存的使用情况-h 以人类能读懂的格式显示3.0 awk各种组合运用3.1 awk进行计算3.2 awk命令的引用shell变量 3.3

qq_48391148的博客 6万+

PADS Logic VX2.5元件绘制全流程:从零开始创建自定义元件库

本文详细介绍了在PADS Logic VX2.5中从零开始创建自定义元件库的全流程。内容包括理解PADS独特的四库分立结构、绘制原理图符号(CAE封装)、关联PCB封装、创建元件类型以及最终的调用验证。掌握元件绘制技能能从根本上提升设计效率、确保设计规范统一,并从源头杜绝原理图与PCB之间的关联错误,是硬件工程师必备的核心能力。

oo7890的博客 441

linux中awk命令(最全面秒懂)

AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符linux中有三剑客之称:三剑客之首就是 AWK三剑客功能:grep : 过滤文本sed : 修改文本awk : 处理文本$0 : 代表当前行(相当于匹配所有)$n : 代表第n列案例1:(以:为分隔符)案例2:(默认空格为分隔符)

一个懒鬼的博客 4万+

倍福 MODBUS TCP/IP通信

(*默认字符串80字节,此处声明为255字节,可以一次性传42个UINT数据.5位整数加一个空格,即每个数据6字节*)(*---------------------------------------- 以下为用户程序 ----------------------------------------*)(*读回并换算后的值*)(*准备写到PLC的值*)(*用于比较两次读回的值相差多少,以估计通讯的速度, Act_CalcDiff*)(*用于切换读和写,Act_Protocal*)

qq_33280096的博客 1367

银河麒麟系统下VSCode安装全攻略:从下载到桌面快捷方式(附常见问题解决)

本文详细介绍了在银河麒麟系统下安装和优化VSCode的全流程,包括环境准备、安装策略、权限管理、桌面快捷方式创建以及系统级性能调优。特别针对国产系统环境提供了常见问题解决方案和必备插件推荐,帮助开发者高效配置开发环境。

v6b7n8m9q0的博客 1133

linux之awk超详解

linux之awk详解 1、awk简介 awk是一种编程语言,用于linux下对文本和数据进行处理。数据可以来来自标准输入、一个或多个文件,或其他命令的输出。 更多作为脚本来使用。 awk处理数据的方式:逐行扫描文件,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。如果没有指定动作,则把匹配的行显示到标准输出(屏幕)。如果没有指定模式,则所有被操作所指定的行都被处理。 2、选项 选项 含义 备注 -f 从脚本文件中读取awk命令。 常用 -F 指定输入文件折分隔符,fs是一个字符串

m0_52425873的博客 2万+

STM32F407 UART4串口DMA收发实战:告别频繁中断,用空闲中断+DMA搞定不定长数据

本文详细介绍了STM32F407 UART4串口结合DMA和空闲中断实现高效不定长数据收发的实战方案。通过DMA硬件级数据搬运和空闲中断智能帧检测,显著降低CPU占用率,提升通信效率,适用于工业传感器数据采集和智能设备通信场景。

weixin_42631411的博客 154

【linux】awk的基本使用

awk是shell中一个强大的文本处理工具,被用于处理文本和数据当你心中默念想要使用类似于处理某一行,处理某一列 的文本的功能时,就是awk登场的时候了举个简单的例子是,当我们想知道自己的所有网卡的名字时,可以用ifconfig查看我们会看到类似于上述信息一样密密麻麻的文字,当然我们可以手动CTRL C CTRL V 把网卡名称拿出来,但是如果希望有一种写法可以不用手动去查看获取的话,可以试试使用awk。

andyshi1998的博客 2499

AMD MI355X与NVIDIA B200在GLM5.2大模型推理性能与成本对比分析

在 AI 推理硬件选型中,成本与性能的平衡一直是技术决策的核心难点。AMD 最新发布的 CDNA 4 架构 MI355X 加速卡与 NVIDIA Blackwell 架构的 B200 在 GLM5.2 这类千亿参数大模型上的表现,直接关系到企业部署私有化模型或提供推理服务的经济性。实际测试数据显示,在 32 tok/s/user 的交互性设定下,单张 MI355X 能够达到 1369 tok/s 的吞吐量,虽然略低于 B200 的 1756 tok/s,但每百万 token 成本仅为 0.30 美元,比 B

weixin_28221501的博客 295

ROS——无人机ROS仿真包 rotors_simulator 编译教程

文章目录 安装wstool sudo apt install python3-wstool 创建ROS工程 $ mkdir -p ~/UAV/src $ cd ~/UAV/src $ catkin_init_workspace # initialize your catkin workspace $ wstool init 下载源码 git clone git@github.com:ethz-asl/rotors_simulator.git 源码链接: https://github.com/eth

漫长IT路 5863

Linux awk 命令

方法一:-v varname=value ,变量名区分字符大小写。方法二:在program中直接定义。这里是封面:

yangchuang111213的博客 1809

24、虚拟地理信息系统:技术与应用的全面解析

本文全面解析了虚拟地理信息系统(虚拟GIS)的技术架构与应用前景。文章从地理空间数据的增长出发,探讨了虚拟GIS在地形、建筑、天气等多维度数据的交互式可视化技术,重点介绍了全球层次结构、多分辨率模型、缓存分页机制及交互导航方法。系统已应用于天气分析、城市规划、应急响应等领域,并展望了未来在数据处理、模拟操作、移动可视化及智能城市、文化遗产保护等方向的发展路径与技术挑战。

v4w5x6的博客 89

linux命令学习-awk命令

awk 是一种编程语言和命令行工具,主要用于文本处理。它处理输入流或文件中的每一行,并根据指定的模式和操作进行处理。文件和命令都给出,运行结果文字有描述,可以自行测试验证。

qq_40840571的博客 1801

【数据集实例】CMIP6气候模式数据下载-以河东地区为例

以河东地区为例,介绍CMIP6数据下载及处理

WW、forever的博客 4944

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

linux awk命令和awk语言

Awk 是一个工具,使程序员能够编写小巧但有效的程序,这些程序以定义要在文档的每一行中搜索的文本模式的形式出现,并定义当在某一行中找到匹配项时应采取的操作。Awk 的内置变量包括字段变量—$1、$2、$3 等($0 是整个行)—这些变量将一行文本分解为单独的单词或称为字段的片段。由于默认情况下,输入行是输入记录,因此默认的记录分隔符字符是换行符。通常大家说的awk几乎都是在linux/unix中使用的awk命令,见下,在上面的例子中,awk 命令打印出所有匹配 ‘manager’ 的行。

有人说学习`这个`最好的时间是十年前,有人说最好的时间是现在,众说纷纭... 847

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

linux awk命令用途,linux awk命令怎么用?

linux awk命令怎么用?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!linux awk命令怎么用?awk:用于一行中分成数个“栏位”来处理。适合处理 小型资料。执行模式:awk '条件型别1{动作1} 条件型别2{动作2} ...' filename# last | awk '{print $1 "\t" $3...

weixin_42104906的博客 444

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

linux命令 awk_如何在Linux上使用awk命令

linux命令 awkFatmawati Achmad Zaenuri/ShutterstockFatmawati Achmad Zaenuri / Shutterstock On Linux,awk is a command-line text manipulation dynamo, as well as a powerful scripting language. Here’s an in...

culintai3473的博客 834

Unix/Linux 中的 AWK 命令及示例

本文介绍了AWK命令,这是一种用于文本处理和生成报告的脚本语言。AWK支持模式扫描和处理,能够搜索文件中的匹配行并执行操作。文章提供了AWK的基本语法和选项,并通过示例展示了如何使用AWK进行文本处理,包括打印所有行、匹配特定模式的行、拆分字段、以及使用内置变量如NR、NF、FS、RS、OFS和ORS。

weixin_45116612的博客 1008

Linux 命令:awk

Linux 命令:awk教程

闲余知道 1909

linux 高级命令awk

文章目录linux 高级命令awk小例子awk语法基本用法 linux 高级命令awk AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。 之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。 我们用ls -l默认会输出一些文件权限,用户名,文件大小等但有时候,我们要求格式输出怎么办呢,这时,就要用到awk命令。 小例子 $ ls -l total 1395200 -rw-r-

mirana的专栏 700

linux awk重定向,linux awk命令详解一

linux awk命令详解一一.AWK简介awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本。awk其名称得自于它的创...

weixin_29027597的博客 504

awk -f 分隔符 命令_Linux awk命令详解(详解版)

除了使用 sed 命令,Linux 系统中还有一个功能更加强大的文本数据处理工具,就是 awk。它诞生于 20 世纪 70 年代末期,这也许是它影响了众多 Linux 用户的原因之一。曾有人推测 awk 命令的名字来源于 awkward 这个单词。其实不然,此命令的设计者有 3 位,他们的姓分别是 Aho、Weingberger 和 Kernighan,awk 就取自这 3 为大师姓的首字母。 和...

weixin_35698738的博客 3804

linux $0命令,linux中的awk命令

Linux中的awk是一种处理文本文件的语言,下面由学习啦小编为大家整理了linux的awk命令的相关知识,希望对大家有帮助!linux中的awk命令详解AWK是一种处理文本文件的语言,是一个强大的文本分析工具。之所以叫AWK是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的Family Name的首字符。语法awk [选项参数...

weixin_42514890的博客 359

linux命令之awk详解

awk是什么 awk是linux环境下的一个命令行工具,但是由于awk强大的能力,我们可以为awk工具传递一个字符串,该字符串的内容类似一种编程语言的语法,我们可以称其为Awk语言,而awk工具本身则可以看作是Awk语言的解析器。就好比python解析器与Python语言的关系。我们一般使用awk来做什么,awk又适合做什么工作呢。由于awk天生提供对文件中文本分列进行处理,所以如果一个文件中的每行都被特定的分隔符(常见的是空格)隔开,我们可以将这个文件看成是由很多列的文本组成,这样的文件最...

mary0712的博客 3303
上一篇: Linux中大括号,小括号,中括号
下一篇: 交互式shell和非交互式shell、登录shell和非登录shell
Code_LT
博客等级 码龄10年 307粉丝 182原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值