awk 几个特殊的内置变量

本文介绍了awk语言中的几个关键内置变量,包括NR(当前行数)、NF(字段个数)、FS/OFS(输入/输出字段分隔符)及RS/ORS(输入/输出记录分隔符)。通过具体实例展示了如何使用这些变量进行数据处理。
awk 几个特殊的内置变量


NR:当前读出的行数
NF:当前记录中的字段个数


FS:输入字段分隔符(默认值为空格)
OFS:输出字段分隔符(默认值为空格

RS:输入记录分隔符(默认值为换行符)
ORS:输出记录分隔符(默认值为换行符)

尤其要注意FS与RS,OFS与ORS的区别,字段与记录是不一样的,字段是指一次读取中按照预先设置的分隔符所分割的字节。
例:
#awk 'BEGIN{FS=":";OFS=",,,"}{print $1, $2, $3}' bers_64k.vec
#awk 'BEGIN{FS=":";ORS=",,,"}{print $1,$2 ,$3}' bers_64k.vec

在 `awk` 中引入变量的方式主要有以下几种,每种方式适用于不同的使用场景。 ### 在命令行中传递变量 可以在命令行中直接定义变量,并在 `awk` 脚本中使用这些变量。需要注意的是,变量的定义必须放在文件名之前,否则变量无法被正确识别。例如: ```bash awk '{print a, b}' a=111 b=222 yourfile ``` 上述方式适用于简单的变量传递,但在 `BEGIN` 块中无法直接访问这些变量。为了在 `BEGIN` 块中使用这些变量,需要使用 `-v` 参数显式传递: ```bash awk -v a=111 -v b=222 '{print a, b}' yourfile ``` 每定义一个变量,都需要加上 `-v` 参数[^1]。 ### 调用环境变量 如果需要在 `awk` 中使用环境变量,可以通过字符串拼接的方式实现。例如,使用 `LOGNAME` 环境变量: ```bash awk '{print "'"$LOGNAME"'"}' yourfile ``` 这种方式通过在 `awk` 的 `print` 语句中嵌入外部变量的值来实现环境变量的调用。对于字符串类型的变量,这种形式尤为常用[^5]。 ### 使用内置变量 `awk` 提供了许多内置变量,例如 `FS`(输入字段分隔符)、`OFS`(输出字段分隔符)、`RS`(记录分隔符)等。这些变量通常在 `BEGIN` 块中进行设置,以控制 `awk` 的行为。例如: ```bash awk 'BEGIN {FS=","; OFS=":"} {print $1, $2}' yourfile ``` 上述命令将输入字段分隔符设置为逗号,并将输出字段分隔符设置为冒号。内置变量的使用不需要额外的参数传递[^3]。 ### 在 `awk` 脚本中定义变量 除了在命令行中传递变量外,还可以在 `awk` 脚本内部定义和使用变量。例如: ```bash awk 'BEGIN {a=111; b=222} {print a, b}' yourfile ``` 这种方式适用于变量值在脚本内部定义的情况,无需从外部传递变量。 ### 示例:在 `BEGIN` 块中使用外部变量 当需要在 `BEGIN` 块中使用外部变量时,必须使用 `-v` 参数显式传递: ```bash awk -v a=123 -v b=456 'BEGIN {print a, b}' yourfile ``` 上述命令将变量 `a` 和 `b` 的值传递到 `BEGIN` 块中,并在脚本执行前打印这些变量的值[^5]。 ### 总结 `awk` 提供了多种方式引入变量,包括命令行变量传递、环境变量调用、内置变量使用以及脚本内部定义。不同的场景需要使用不同的方法,例如在 `BEGIN` 块中使用变量时,推荐使用 `-v` 参数传递变量值。这些方法使得 `awk` 在处理文本时更加灵活和强大。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值