awk使用方法笔记

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
1. awk最基本的功能是在输入文件中按行匹配指定的字符串格式,如果匹配则将当前行复制到缓冲区进行进一步处理,但并不改变输入文件本身。awk匹配每一行(称为Record)后,使用默认或指定的分割符自动将其分割为若干段(称为Field),每一段可使用$number进行引用和访问。其中段号0对应整个Record的内容。处理完成每一行后继续读入下一行进行处理。

awk命令的一般格式为

awk	‘/pattern/ {action} 
	/pattern1/{action1}’   datafile1 datafile2

awk可以同时指定多个匹配条件和处理动作(规则),每条规则之间可以另起新行分割,只要将它们包含在同一单引号里面即可。awk可以同时处理多个文件对象。

如果省略{action},则awk默认打印所有匹配pattern的行。如果想要指定不作任何事情,怎可省略action的同时,只保留{}


2. 有三种方法运行awk程序。

  • awk‘program’ datafile1 datafile2 …

    这里的programpatternaction的组合,方式如前述。

  • awk–f program-file datafile1 datafile2 …

    适用于程序较为复杂的情形。将/pattern/{action}组合放入program-file(不需要加单引号)后即可调用。为了使程序文件一目了然,可使用后缀名.awk

  • awk程序写为脚本文件后执行。

    在脚本文件行首加上 #!/bin/awk –f,然后BEGIN{}块指定主程序执行的先决条件,中间是主程序,最后是END{}块指定结束操作。运行时,按脚本方式运行,并在后面指定输入文件。

需要注意的是,awk脚本和shell脚本中执行awk语句是不同的,前者使用awk程序的语法规则;后者只是将前两种用法写入文件执行,遵从shell脚本的语法规则。


3.读入文件时,除了使用默认的方式按行读入Record,也可以指定其它的Record Separator

awk ‘BEGIN {RS = “/”}; {print $0}’ datafile

使用awk内置变量RS指定新的Record分割符为/。因为awk打印时在每一条Record后重起新行,这样通过指定新的分割符,就为datafile添加了新的换行。特别地,若指定RS为空字符,则以空行为分割符。awk利用内置变量FNR追踪当前读入的行号(记录号)。每次读入新文件时,FNR将自动置为0。另外一个变量NR记录当前awk命令一共读入了的行数(记录数),该变量从0开始,但即使读入新文件也不会重新置0。如果在主程序中重新设定了RS,则只会影响设定后读入的内容。


4.对于读入的每一行(记录),awk默认以(一个或多个)空格/制表符为分段符将其划分为若干段(Field),每一段可使用$number进行引用和访问,其中number可以是可计算数值的变量或表达式。$0对应整条记录,$NF对应最后一个分段。如果记录号大于总分段数,则返回空字符,但可以对其进行赋值操作后打印。注意,不带$NF对应一个内置变量,它的值是当前记录的分段数量。例如:

awk ‘$1 ~ /pattern/ {print $!, $NF} ’ datafile

上例中打印datafile中所有行中首个分段包含pattern的行的第一个分段和最后一个分段。~是匹配运算符,它检验给定字符串($1)是否匹配之后的正则表达式。
除了默认的分割符,awk允许指定字符或正则表达式作为分割符。分割符不出现在分段中。awk使用内置变量FS指定段分割符。

awk ‘BEGIN {FS = “:”}; {print $0}’ datafile

使用命令行指定分割符时,可使用参数–F

awk –F, ‘/pattern/{action}’ datafile

上例指定“,为段分隔符。


5. 使用print打印多个分段时,默认以空白作为间隔符,但也可以使用内置变量OFSoutput fieldseparator)显式指定其它间隔符。类似的多个记录之间也可以指定默认的换行符之外的其它字符串。

awk  ‘BEGIN {OFS = “;”; ORS=“\n\n”; OFMT = “%d” } 
            {print $1, $2}’ datafile

除了OFS,本例中ORS是记录之间的间隔符。

OFMT则是处理数字时的打印格式。但实际上,我们通常用printf来格式化打印内容。它可以为每一个分段指定宽度,指定数字的打印格式(基数、指数形式等等)。用法如下:

awk  ‘{print format item1, item2…}’

print不同,printf不会在打印完一条记录后自动添加换行,并且OFSORS将失去其作用。format的指定方式和C语言中printf函数的format用法相同。

awk  ‘{printf  “%-10s   %s\n”,  $1, $2}’    datafile

本例中,将分段1打印为最小宽度为10个字符的字符串,若不够则在左边补足空白符(不带-时在右边补足空白符)。然后空格后直接打印分段2。最后插入换行符后继续处理下一条记录。
另外,还可以利用 >, >>|操作符重定向printprintf的输出。例如:

awk ‘{ print $1 > “output_file_name”
printf format $2 | “sort –r >> output_file_name_1”}’ datafile


6. pattern 支持正则表达式匹配。


7.awkaction必须被{}包括,各个不同的action之间以换行或者分号分隔。

awk中,使用+进行的加法运算,自动将字符串转换为整型。如若在字符串中遇到非数字字符,则将其及后面的所有字符作为0加到前面的数值中。连接字符串或连接数字和字符串时,只需将字符串变量写在一起,并用括号括起来即可。例如:

awk  ‘BEGIN{a=100; b=“10test10”; print(a+b);}’   
awk ‘BEGIN{ a=100; b=“10test10”;print(a b)}’

第一条命令将打印110,第二条命令将打印10010test10。此外awk提供内置变量CONVFMT定义浮点数(整数转字符串时不受影响)转换为字符串时的格式规则。对变量进行转字符串操作后,浮点数不会按照CONVFMT定义的精度重新赋值,而是保持原来的值。例如:

awk  ‘BEGIN{a=123.321; CONVFMT = “%3.1f”;
print a “ is a number”
print a+1.654}’   
第一行输出是123.3 is anumber,第二行输出是124.975

另需注意的是,字符串的下标从1开始,例如函数index(“peanut”, “an”) 将返回3,如果index没有在源字符串中找到目标,则返回0


8. awk支持内建函数和自定义函数的调用,支持if- else if -else条件语句,for, while/do while等循环语句,breakcontinue等循环控制语句,以及nextexit等流程控制语句。

C语言不同,awk中可以使用for( index in array )的形式遍历数组下标(idnex),然后使用array[index]访问数组中相应的元素。next语句使程序跳过当前读入的记录,立即进行读入处理下一条记录的操作,它不能出现在BEGINEND块儿中。exit使程序立即退出awkexit默认返回0(执行成功),但也可以在其后加上返回值来表示其它返回状态。


9.声明awk数组时,无需声明其长度,且类似于javascript编程语言,任何数字和字符串都能作为数组下标使用。awk数组元素是关联关系(associative),下标和元素值对应,但下标之间并无直接关系。建立或访问数组元素时通过array_name[index] (=value)方式,删除数组元素时使用delete array_name[index]语句。


10.awk内建了一些常用的函数,int(var),sqrt(var), exp(x), log(x), sin(x), cos(x), atan2(var1, var2), rand() srand(var)等数值计算函数;index(srch_src,srch), length(str), match(str, regexp), split(str, array, fieldsep), sprint(format,expression1…), sub(regexp, replacement, target), gsub(regexp, replaecement,target), substr(str, start, length), tolower(str), toupper(str)等字符串操作函数。


11. 除了管道输入、标准输入流和文件流,awk还提供内置函数getline支持输入控制。如果getline成功读入下一条记录,则返回1;如果getline遇到文件结束标志则返回0;如果读入下一条记录中出错,则返回-1getline读入时不受匹配条件(pattern)的影响。

不带参数的getline直接在程序块继续读入当前输入文件的下一行,并将其分段等待其他处理。它将改变$0,NF, FNR, NRRT的值。

getline var将一条记录读入到变量var中,但不会将其分段,因此只有NRFNR将会变化,而$0NF将仍是上一条记录的内容。主程序体执行完成后,awk跳过var对应的记录行,读入其下一行。

getline < “filename”从文件名为filename的另一个文件读入一行,并将其分段,但不对当前文件流作其它改变,因此NRFNR不会变化,而$0NF将根据从filename中读入的记录行改变。主程序体执行完成后,awk读入当前文件的下一行继续处理。

getline var< “filename”从文件名为filename的另一个文件读入一条记录到变量var中,只改变内置变量RT

command |getline的形式,command将作为命令运行,命令输出作为getline的输入,每次读入一行,并遍历所有行。该命令会改变$0,NFRT的值。

“command” | getline var的形式,command将作为命令运行,命令输出作为getline的输入,每次读入一行,并遍历所有行。

使用getline读取其它文件内容时,必须注意关闭文件流。

close(filename)
close(command)

如果不关闭,那么下次使用getline读相同的文件时,不会从最开始行读,而是会接着上一次getline的行的后面开始读入。

awk使用 linux里面的awk命令 阅读详情

相关推荐

awk命令:将某一列、行的数值相加。去除列中重复值,重复行

利用awk命令awk '{print $n}' | awk '{sum+=$1}END{print sum}' 例:

平平无奇,不断学习的运维玖玖 9811

awk用法

&“表示"与”、“||表示"或”、"!还可以进行简单的数学运算,如+、一、*、/、%、^分别表示加、减、乘、除、取余和乘方。逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。当读到第一行时,匹配条件,然后执行指定动作,再接着读取第二行数据处理,不会默认输出。其他内置变量的用法FS(输入)、OFS、NR、FNR、RS、ORS。AWK 工作通过三个步骤。

yangye2424637628的博客 2396

【shell】awk基本用法

awk基本用法及举例

sodaloveer的博客 3206

awk命令

awk是一个强大的文本处理工具。awk把文件逐行的读入,一行叫一条记录,以空格为分隔符将每行切片,切开的部分叫域或者列或者字段,然后处理各个字段。awk有3个不同版本:awk、nawk、gawk。未作特别说明,一般指gawk,gawkAWK的GNU版本。awk其名称源自它的创始人Alfred Aho 、Peter Weinberger和Brian Kernighan姓氏的首个字母。

void的博客 6042

Linux新手生存笔记[4]——重点命令1-awk

回到全局目录 ------------------------------------------------ 目录 简介 1 命令格式&说明 2 调用方法 3 域切分&操作 3 正则匹配 4 内置变量&操作 5 内置函数&操作 6 格式化输出 7 数组 8 条件判断&流程控制 9 与shell交互 10 awk与变量 10 错误排查 11 其他 11

wklken的笔记 1万+

AWK学习笔记

AWK学习笔记目录AWK学习笔记 简介 基本使用方法 格式 调用方式 命令部分的构成 示例 正则表达式待补充 字符集待补充 awk内置变量待补充参考资料 简介 awk是Unix环境下用于格式化文本,并按一定条件进行筛选显示的工具。 awk以发展这种语言的人Aho.Weninberger和Kernigham命名。 基本使用方法格式 基本格式和说明: awk [-F filed -separator]

lewisaa的专栏 544

awk 学习笔记

是一个功能强大的文本处理工具,适用于处理结构化的文本数据。通过掌握基本命令、常用函数和实用脚本,你可以高效地处理和分析数据。希望这些学习笔记对你有所帮助!的知识,包括常用的命令、函数和一些实用的脚本示例。这些内容可以作为学习笔记,帮助你更好地理解和使用。脚本保存为文件,方便重复使用。好的,我将为你总结关于。:确保字段分隔符正确。

2302_80012625的博客 607

Shell_工具_awk

文章目录通用公式开始测试结语附录awk常用场景 鉴于之前用awk只了解到点皮毛,而且工作中用之甚少,这里准备了解并整理一下awk的用法,尽量保证一个公式覆盖大部分需求 通用公式 通用公式并不是所有场景都能满足,只是符合awk基础使用的大部分场景 awk调用主要包括两种:XXXX | awk.script 或者 awk.script filename awk.script通用公式如下: awk -F '分隔符(默认\t)' ' BEGIN {print "可定义变量或者打印题头";size=0;}

Eden_lang的博客 185

awk 笔记之五 输出

1. print        print $1,$2  中间使用逗号隔开,  实际输出是在 $1 和 $2 之间留一个空格.      print "" 输出一个空行      print $1   $2 会将$1和$2连接到一起.         输出的分隔符OFS和ORS分别指定字段分隔符和记录分隔符.      如 awk  ' BEGIN { OFS=";" ; ORS="\

dairyman的专栏 1909

学习笔记 | Linux系列教程之文本三剑客 - awk、grep、sed从入门到实战

学习视频来源:B站《Linux系列教程之文本三剑客 - awk、grep、sed从入门到实战》 学习视频过程中,跟着老师一步步实践并整理的学习笔记,附上幕布笔记链接 https://share.mubu.com/doc/56BNDu2WbNT (持续学习中:最新更新于 2021年2月8日) ...

团爸讲算法 278

awk使用shell变量及shell使用awk中的变量

在写shell脚本时,经常会使用awk程序。但是有些复杂的逻辑,可能需要在awk使用在shell中定义的变量,而且awk程序处理之后,产生的中间变量,还需要在shell中继续处理。 一、那如何在awk使用在shell中定义的变量呢? 方法一:使用"'把shell变量包起来,即"'$var'";注意是“双引号+单引号+shell变量+单引号+双引号”的格式。 这种写法大家无需改变

rj042的专栏 6万+

awk命令使用方法

awk 是一种强大的文本处理工具,可以用于处理结构化的文本数据。它可以根据指定的模式和动作来筛选、处理和格式化文本。

执笔阑珊的博客 1195

awk使用方法详解

awk工具 awk 选项 ‘模式或条件{编辑命令}’ 文件1 文件2…. //过滤并输出文件中符合条件的内容 awk -f 脚本文件 文件1 文件2… //从脚本中调用的编辑指令,过滤并输出内容 awk包含几个特殊的内建变量(可直接用)如下所示: FS:指定每行文本的字段分隔符,默认为空格或制表位; NF:当前处理的行的字段个数; NR:当前处理的行的行号(序数); $0:当前处理的行的整行内容; $n:当前处理的行的第n个字段(第n列); FILENAME:被处理的文件名; RS:数据记录分隔,默认为\n

empty_csx的博客 3516

AWK命令的使用方法

AWK命令使用指南:1.默认输出整行($0)或指定列($1);2.使用{}定义动作块,BEGIN/END进行预处理和后处理;3.支持多种匹配方式:字段匹配、范围匹配、复合条件、行号匹配等;4.常用选项:-F指定分隔符,-v定义变量;5.内置变量说明:$0整行、NR行号、NF字段数等;6.注意事项:变量名需大写,print语法区分列与数值输出。本文详细介绍了AWK的基本语法和实用技巧,适用于文本处理场景。

2201_75486314的博客 1134

AWK笔记

awk知识学习。提示:以下是本篇文章正文内容,下面案例可供参考提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法

qq_33598184的博客 1684

Linuxawk命令使用方法

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

小哲的博客 5733

Awk的一些使用方法

通用线程:Awk 实例Daniel Robbins (drobbins@gentoo.org)第一部分Awk 是一种非常好的语言,同时有一个非常奇怪的名称。在本系列(共三篇文章)的第一篇文章中,Daniel Robbins 将使您迅速掌握 awk 编程技巧。随着本系列的进展,将讨论更高级的主题,最后将演示一个真正的高级 awk 演示程序。捍卫 awk在本系列文章中,我将使您成为精通 awk 的编码人员。我承认,awk 并没有一个非常好听且又非常“时髦”的名字。awk 的 GNU 版本(叫作 gawk)听起来

yuanxuran0101的专栏 1507

LinuxAWK命令使用方法

擅长按列处理结构化数据(如日志、CSV)。它以逐行方式处理文本,支持条件过滤、计算、格式化输出等。AWK 是文本处理的瑞士军刀,掌握后可高效处理日志、报表等结构化数据。查阅完整文档,可进一步探索其高级功能(如多维数组、位操作等)。是 Linux 下功能强大的。

weixin_46866349的博客 1402
上一篇: ORACLE数据库中的ROWNUM和ORDER BY执行顺序
下一篇: python语法笔记
乐哉悠哉
博客等级 码龄16年 90粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值