我想做这样的事情:
for i in 1 2 3
do
gawk '{if ($i==$2) {print $0;}}' filename
done
这可能吗?
谢谢
为了避免丑陋的引用,您可以使用 gawk 的变量传递功能:
for i in 1 2 3
do
gawk -v param=$i '{if (param==$2) {print $0}}' filename
done
假设您希望 gawk 脚本是
{如果 ($1 == $2) ... } {如果 ($2 == $2) ... } {如果 ($3 == $2) ... }
你可以做:
对于我在 1 2 3 做 gawk '{if ($'$i'==$2) {print $0;}}' 文件名 完毕
当然,这是可能的,但它可能不会做你想做的事。
……想一想,你想让它做什么?从你写的东西看不太清楚。您可能需要更改的一件事是用双引号替换单引号,因为变量(如$i
)不会替换为单引号字符串。
想到您的脚本的两种可能的解释:
filename
这是循环的两个版本:
for i in 1 2 3; do
gawk "{if (\"$i\"==\$2) {print \$0;}}" filename
done
for i in "$@"; do
gawk "{if (\"$i\"==\$2) {print \$0;}}" filename
done