【发布时间】:2014-09-13 03:57:37
【问题描述】:
我需要能够运行脚本并传递参数(日期和月份),例如
$root# ./myscript -v 31 12
但我似乎找不到任何合适的方法来将命令行参数传递给 bash 变量 X 中的 awk 命令,而不会导致脚本阻塞。我尝试使用双引号来允许变量插值,使用 Stack Overflow 上其他地方概述的反斜杠转义其他美元符号,但无济于事。
#!/bin/bash
X=$(./some_script | awk -v VARIABLE="$1" '$1 == "VARIABLE" | awk '{print $1,$2,$3}')
Y=$(./other_script | awk -v VARIABLE="$2" '$1 == "VARIABLE" | awk '{print $1,$2,$3}')
echo '-------------RESULTS--------------'
echo
paste <(echo "$X") <(echo "$Y")
这会阻塞脚本并返回错误
awk: syntax error near line 1
awk: bailing out near line 1
已解决 似乎标准的 Solaris 'AWK' 不接受 -v 标志,并且该特定错误在某种程度上传达了它。用 nawk 切换它,它运行良好,如下所述。 @David_W 详细介绍了 nawk/awk 参数传递。非常感谢 @Ed_Morton 发现错误,感谢 @anubhava 和 @hek2mgl 进行概念验证。
#!/bin/bash
echo
X=$(./some_script | nawk -v VARIABLE="$1" '$1 == "VARIABLE" {print $1,$2,$3}')
X=$(./other_script | nawk -v VARIABLE="$1" '$1 == "VARIABLE" {print $1,$2,$3}')
echo '-------------RESULTS--------------'
echo
paste <(echo "$X") <(echo "$Y")
【问题讨论】:
-
为了清楚起见,感谢贡献者。
标签: linux bash shell awk solaris