曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 3902|回复: 3
打印 上一主题 下一主题

awk 常用内置变量

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
跳转到指定楼层
楼主
发表于 2011-9-22 09:48:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
FNR                当前输入文件的记录数

FS                  字段分隔字符 (默认为: " ")

NF                   当前记录的字段数

NR                  在工作(job)中的记录数

OFS                输出字段分隔字符(默认为: " ")

ORS                输出记录分隔字符(默认为: "\n")

RS                  输入记录分隔字符(仅用于 gawk 与 mawk)

ARGC             命令行参数的数目

ARGIND          命令行中当前文件在 ARGV 内的索引

CONVFMT       数字转换格式,默认为 %.6gd

ENVIRON          包含当前 shell 环境变量的数组

FILEDWIDTHS    在分隔固定宽度的列表时,使用空白而不是 FS 进行分割的字段宽度列表

FILENAME          当前输入文件的文件名

IGNORECASE     在正则表达式和字符串匹配中不区分大小写

OFMT                   数字的输出格式

RLENGTH             match 函数匹配到的字符串的长度

RSTART              match 函数匹配到的字符串的偏移量

RT                        记录终结符,对于匹配字符或者用 RS 指定的正则,gawk 将 RT 设置到输入文本

SUBSEP                数组下标分隔符

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
沙发
 楼主| 发表于 2011-9-22 18:11:30 | 只看该作者

IGNORECASE 举例

假设有一个文本内容如下(domain.txt):
Groad   123
sIna    100
SoHu    121
Baidu   111
运行下面命令:
# awk '{IGNORECASE=1}; $1 == "groad" {print NR, $1, $2}' domain.txt     
1 Groad 123
当 IGNORECASE 变量为非 0 值时,在正则表达式和字符串匹配中不区分大小写。从上面也可以看到,模式和操作在同一行上的混用方法。

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
板凳
 楼主| 发表于 2011-9-22 14:37:21 | 只看该作者

OFS 举例

OFS 是输出字段分隔符,它默认情况下是个空格。比如有下面一个文本:
# cat temp.txt
abc     www     3201    3/13/11         30138
Dpf     gro     3033    2/32/13         02901
xyz     dai     3010    8/81/11         10391
opf     lio     8901    7/18/38         31899
我们在打印出第 3 列和第 2 列的内容时会使用下面的命令:
# awk '{print $3, $2}' temp.txt
3201 www
3033 gro
3010 dai
8901 lio
在上面的 awk 命令中,$3 和 $2 之间有一个逗号分隔,这个逗号在打印输出时被转换为 OFS 所代表的符号,默认是空格。我们可以先修改 OFS 为其它的分隔符,比如:
# awk '{OFS = "---"; print $3, $2}' temp.txt
3201---www
3033---gro
3010---dai
8901---lio
假如 $3 和 $2 之间没有逗号,那么将得不到转换,输出时两个字段是连在一块的:
# awk '{print $3 $2}' temp.txt
3201www
3033gro
3010dai
8901lio

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34397
地板
 楼主| 发表于 2011-9-22 14:41:33 | 只看该作者

NF 举例

NF 表示当前记录的字段数。下面命令仍然使用上面的 temp.txt 作为要处理的文本:
# awk '{print "Number of fields: "NF}' temp.txt
Number of fields: 5
Number of fields: 5
Number of fields: 5
Number of fields: 5
在 temp.txt 中每行共有 5 个列。

可以在该变量前面加一 '$' 符号,从而指向该字段的值,如:
# awk '{print "Number of fields: "NF; print $NF}' temp.txt
Number of fields: 5
30138
Number of fields: 5
02901
Number of fields: 5
10391
Number of fields: 5
31899
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-18 01:24 , Processed in 0.064950 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表