0

我想做这样的事情:

for i in 1 2 3
do
   gawk '{if ($i==$2) {print $0;}}' filename
done

这可能吗?

谢谢

4

4 回答 4

3

为了避免丑陋的引用,您可以使用 gawk 的变量传递功能:

for i in 1 2 3
do
    gawk -v param=$i '{if (param==$2) {print $0}}' filename
done
于 2009-09-13T22:32:49.607 回答
1

假设您希望 gawk 脚本是

{如果 ($1 == $2) ... }
{如果 ($2 == $2) ... }
{如果 ($3 == $2) ... }

你可以做:

对于我在 1 2 3
做
   gawk '{if ($'$i'==$2) {print $0;}}' 文件名
完毕
于 2009-09-13T21:54:08.710 回答
0

当然,这是可能的,但它可能不会做你想做的事。

……想一想,你想让它做什么从你写的东西看不太清楚。您可能需要更改的一件事是用双引号替换单引号,因为变量(如$i)不会替换为单引号字符串。

于 2009-09-13T21:31:53.243 回答
0

想到您的脚本的两种可能的解释:

  1. 您确实想搜索“1”、“2”,然后搜索“3”作为第二个字段filename
  2. 您实际上想搜索第一个 shell 脚本参数,然后是第二个,...

这是循环的两个版本:

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
于 2009-09-13T21:55:29.757 回答