在 awk
中,如果你想通过 system()
函数调用其他命令并获取其输出,实际上 system()
函数并不会直接返回命令的输出。system()
函数主要用于执行系统命令,并且它的返回值是命令执行的状态(通常是退出状态码,0 表示成功,非零表示有错误)。
如果你确实需要从 system()
调用的命令中捕获输出,并进一步处理这些数据,那么你需要使用其它手段间接实现,例如重定向到临时文件或管道,然后通过 getline
函数读取输出内容:
# 通过临时文件获取输出
{
"command arg1 arg2 > output.tmp" | getline
# 现在可以从output.tmp文件中读取数据
while (getline < "output.tmp") {
print $0
}
close("output.tmp") # 关闭打开的文件
}
# 或者通过管道直接读取到awk变量中
{
cmd = "command arg1 arg2"
if ((cmd | getline line) > 0) {
print line
while (getline line > 0) {
print line
}
}
close(cmd) # 关闭与命令关联的管道
}
上面的代码展示了两种方法:
- 使用
>
将命令输出重定向到临时文件,然后通过getline
从文件读取。 - 直接通过管道将
system()
替换为命令执行与getline
结合的方式,这样可以实时接收命令的输出并在awk
中进行处理。
请注意,第二种方法更有效率,因为它避免了磁盘I/O操作,但需要注意正确关闭与命令关联的管道以防止资源泄露。