awk传参问题的详细解释

简介: 【10月更文挑战第16天】awk传参问题的详细解释

在使用awk时,参数传递是一个常见的问题。以下是关于awk传参问题的详细解释:

1. 直接传递

直接在命令行中将参数写在输入文本之前,脚本之后。这种方式简单直接,但存在局限性,即在BEGIN块中无法使用这些参数,直到首行输入完成以后它们才可用[^4^]。

示例

$ echo | awk 'BEGIN{print n}' n=1
# 此命令打印出空,并没有打印1,因为n在BEGIN块中不可用。

2. 使用-v选项

-v选项允许在任何输入被读入前定义参数,这是最常用的方法之一[^4^]。

示例

$ echo | awk -v n=1 'BEGIN{print n}'
1

3. 系统内置变量ARGV数组

ARGV数组存储了传递给awk的参数,其中ARGV[0]为awk程序本身,ARGV[1]及之后的索引对应于输入的参数[^4^]。

示例

$ echo | awk 'BEGIN{print ARGV[0]}' var1
awk
$ echo | awk 'BEGIN{print ARGV[1]}' var1 var2
var1
$ echo | awk 'BEGIN{print ARGV[2]}' var1 var2
var2

4. 间接引用 $${VAR} 间接变量引用避免了在一个内嵌awk脚本中引用shell变量的混乱行为[^4^]。 **示例**(计算文件中指定列的总和): ```bash #!/bin/bash ARGS=2 if [ $# -ne "$ARGS" ]; then echo "Usage: `basename $0` filename column-number" exit 65 fi filename=$1 column_number=$2 awk "{ total += \$${column_number} } END { print total }" "$filename"


### 5. export结合ENVIRON变量

通过export将变量导出为环境变量,然后在awk脚本中使用ENVIRON来访问这些环境变量[^4^]。

**示例**(求列的和):
```bash
#!/bin/bash
ARGS=2
if [ $# -ne "$ARGS" ]; then
    echo "Usage: `basename $0` filename column-number"
    exit 65
fi
filename=$1
column_number=$2
export column_number
awkscript='{ total += $ENVIRON["column_number"] } END { print total }'
awk "$awkscript" "$filename"

总结

awk传参有多种方法,包括直接传递、使用-v选项、利用ARGV数组、间接引用以及结合export使用ENVIRON变量等。选择哪种方法取决于具体的应用场景和需求。在实际应用中,需要根据具体情况灵活运用这些方法,以达到最佳的处理效果。

目录
相关文章
|
SQL 关系型数据库 MySQL
SQLyog数据导入导出图文教程
SQLyog数据导入导出图文教程
567 0
|
JSON 前端开发 JavaScript
开源表单方案 Formily 的核心设计思路
Formily 是一个数据+协议驱动的表单解决方案,它站在Reactive响应式编程巨人的肩膀上,构建出了从基础表单到低代码领域的高性能通用基础能力,同时其配套的跨框架+跨终端组件生态体系,也能让用户更高效的开发日常业务表单,尽可能的减少了重复冗余的逻辑实现。本篇内容来自白玄在第十六届D2前端技术论坛的分享,将为你介绍如何在高复杂业务场景下提高我们的表单性能与表单开发效率。
5498 1
开源表单方案 Formily 的核心设计思路
|
12月前
|
机器学习/深度学习 存储 Shell
在awk中传递参数
【10月更文挑战第17天】在awk中传递参数
239 6
|
12月前
|
安全 Java 关系型数据库
springboot整合springsecurity,从数据库中认证
本文介绍了如何在SpringBoot应用中整合Spring Security,并从数据库中进行用户认证的完整步骤,包括依赖配置、数据库表创建、用户实体和仓库接口、用户详情服务类、安全配置类、控制器类以及数据库初始化器的实现。
1105 3
springboot整合springsecurity,从数据库中认证
|
NoSQL JavaScript 算法
Higress 全新 Wasm 运行时,性能大幅提升
本文介绍 Higress 将 Wasm 插件的运行时从 V8 切换到 WebAssembly Micro Runtime (WAMR) 的最新进展。
55667 99
|
12月前
|
运维 Linux 开发工具
第22篇 如何部署gitLab进行开发版本控制
第22篇 如何部署gitLab进行开发版本控制
|
12月前
|
机器学习/深度学习 人工智能 自然语言处理
智能语音助手的技术演进与未来趋势####
【10月更文挑战第16天】 智能语音助手,作为人工智能领域的璀璨明珠,正以前所未有的速度融入我们的生活。本文旨在探索这一技术奇迹背后的奥秘,从最初的简单命令响应,到如今能够理解复杂语境、提供个性化服务的高阶智能体,智能语音助手的发展历程见证了技术进步的非凡成就。我们将深入剖析其核心技术原理,包括自然语言处理(NLP)、语音识别与合成、深度学习等,同时展望未来,探讨在物联网、医疗健康、教育等多个领域潜在的革命性应用。这不仅是一篇技术解读,更是对智能时代生活方式变革的一次深刻洞察。 ####
692 6
|
Linux Shell
Linux中system函数
Linux中system函数
316 0
|
存储 算法 Unix
【Shell 命令集合 文件管理】Linux 拆分文件 split命令使用教程
【Shell 命令集合 文件管理】Linux 拆分文件 split命令使用教程
471 0
|
Java Spring
Spring Boot中Controller接收对象列表实现
Spring Boot中Controller接收对象列表实现
956 0