awk的使用方法(三)

常用的awk内置变量
序号    名称        描述
1        ARGC        命令行参数的数目。
2        ARGV        包含命令行参数的数组。
3        ARGIND        当前被处理的文件的ARGV的index(从0开始算)。
4        BINMODE     在non-POSIX系统中,文件的I/O指定使用"binary"模式。
5        CONVFMT        数字转换格式(默认值为%.6g)
6        ENVIRON        当前环境变量关联数组。
7        ERRNO        包含一个描述错误信息的字符串。
8        FS            字段分隔符(默认是任何空格)。
9        FIELDWIDTHS    字段宽度列表(用空格键分隔)。设置以后匹配字段宽度而不是以FS分隔。 
10        FILENAME    当前输入的文件名。   
11        FNR            当前输入文件的记录号数值。   
12        IGNORECASE    控制所有正则表达式和字符串操作的大小写敏感性(若值为非零,则忽略大小写匹配,初始值为0)。
13        LINT        从AWK程序内部提供--lint选项的动态控制。(若为真,打印lint警告)
14        NF            当前输入记录中的字段数。  
15        NR            到目前为止看到的输入记录的总数。  
16        OFMT        数字的输出格式(默认值是%.6g)。
17        OFS            输出字段分隔符(默认值是一个空格)。  
18        ORS            输出记录分隔符(默认值是一个换行符)。 
19        PROCINFO    这个数组的元素提供正在运行的AWK程序信息。可用(PROCINFO["egid"] PROCINFO["euid"] PROCINFO["FS"] PROCINFO["gid"] PROCINFO["pgrpid"] PROCINFO["pid"]  PROCINFO["ppid"]  PROCINFO["uid"] PROCINFO["version"]  )
20        RS            记录分隔符(默认是一个换行符)。  
21        RT            记录终止符(gawk使用RS的值)
22        RSTART        由match()函数匹配到的第一个字符索引。(若无匹配则为0)
23        RLENGTH        由match()函数所匹配的字符串的长度。(若无匹配为-1)
24        SUBSEP        多个数组元素下标分隔符(默认值是\034)。
25        TEXTDOMAIN    AWK程序的文本域。用来查找程序的字符串本地化翻译。


常用的AWK语句
exit        停止程序的执行,并且退出。
next        停止处理当前记录,并且前进到下一条记录。
nextfile    停止处理当前文件,并且前进到下一个文件。
print        打印使用引号括起来的文本、记录、字段和变量。(缺省情况下是打印出当前整行记录。)
printf        打印格式化文本,类似于它的 C 语言对等成分,但必须指定结尾的换行。
sprintf        返回格式化文本字符串,与 printf 使用相同的格式。

内置的字符串函数
gsub(r,s)        在整个$0中用s代替r
gsub(r,s,t)        在整个t中用s替代r
index(s,t)        返回s中字符串t的第一位置
length(s)        返回s长度
match(s,r)        测试s是否包含匹配r的字符串
split(s,a,fs)    在fs上将s分成序列a
sprint(fmt,exp)    返回经fmt格式化后的exp
sub(r,s)        用$0中最左边最长的子串代替s
substr(s,p)        返回字符串s中从p开始的后缀部分
substr(s,p,n)    返回字符串s中从p开始长度为n的后缀部分

常用AWK参数

-v i=$i     将命令行里的变量i传递给awk内部

 

关于awk的一些常用技巧就写到这里了,其他一些awk和正则表达式,以#! /usr/bin/awk开头的脚本书写方式,还有在动作中读写文件等操作,因为平时用的不多,等有了一定的积累再发上来吧。

这几篇文章的来源主要是参考百度百科、https://awk.readthedocs.io/en/latest/以及部分参考了优快云、博客园的一些文章汇总而来

### Linux 中 `awk` 命令的使用方法 #### 什么是 `awk` `awk` 是一种强大的文本处理工具,主要用于模式扫描和文本处理。它可以识别并处理文件中的每一行数据,并按照指定条件执行操作[^1]。 #### `awk` 的基本语法结构 `awk` 的基本格式可以表示为: ```bash awk [选项] '脚本' 输入文件 ``` 其中 `[选项]` 可选,而 `'脚本'` 部分通常是一个简单的程序逻辑,用于定义如何处理输入的数据[^2]。 #### 示例:简单计算 下面展示了一个简单的例子,说明如何通过 `awk` 执行一些基础运算: ```bash awk 'BEGIN { x = 10; print x + 1 }' ``` 此命令会在不读取任何外部文件的情况下打印出 `11`。这里需要注意的是,在单引号内部的内容会被直接解释为字符串形式传递给 `awk` 处理器,因此即使没有 `$` 符号也能正常工作[^3]。 #### 文件内容筛选与字段提取 假设有一个名为 `data.txt` 的文件,其内容如下: ``` John Doe,30,San Francisco Jane Smith,25,Los Angeles Bob Johnson,40,New York ``` 要获取每个人的年龄列(即第二列),可运行以下命令: ```bash awk -F ',' '{print $2}' data.txt ``` 上述指令设置了逗号作为分隔符 (`-F ','`) 并输出每行记录中的第二个字段[$2]。 #### 条件过滤 继续以上述 `data.txt` 数据为例,如果我们只想显示那些来自洛杉矶的人的信息,则可以用这样的语句实现: ```bash awk -F ',' '$3 == "Los Angeles" {print $0}' data.txt ``` 这里的 `$3 == "Los Angeles"` 表达式指定了仅当第列为 `"Los Angeles"` 时才执行后面的 `{print $0}` 动作。 #### 结合多个动作 还可以在一个 `awk` 调用里完成多项任务。比如统计总人数以及平均年龄: ```bash awk -F ',' 'NR==1{sum=0}{sum += $2}END{print "Total:", NR, ", Average Age:", sum/NR}' data.txt ``` 这段代码先初始化求和变量 `sum` ,接着累加所有人的年龄到该变量上;最后在结束阶段(`END`)报告总数目及均值。 #### 内建变量简介 以下是几个常用的内置变量及其功能概述: - **NF**: 当前行拥有的域数(字段数量) - **NR**: 已经被读入的记录数目 (当前行为第几条) ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值