在shell脚本中使用gawk

时间:2009-09-13 21:30:38

标签: bash gawk

我想做点什么:

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

这可能吗?

感谢

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

假设你想要gawk脚本

{if ($1 == $2 ) ... }
{if ($2 == $2 ) ... }
{if ($3 == $2 ) ... }

你可以这样做:

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

答案 2 :(得分:0)

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

...来想一想,你希望它做什么?你写的东西并不是很清楚。您可能需要更改的一件事是用双引号替换单引号,因为变量(如$i)不会替换为单引号字符串。

答案 3 :(得分:0)

我们会想到您对脚本的两种可能解释:

  1. 您确实要搜索“1”,“2”,然后搜索“3”作为filename
  2. 中的第二个字段
  3. 您实际上想要搜索第一个shell脚本参数,然后是第二个,...
  4. 以下是循环的两个版本:

    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