Awk输入变量作为规则

时间:2014-10-30 22:32:54

标签: awk

美好的一天!

我有下一个代码:

BLOCK=`awk '
/\/\* R \*\// {
  level=1
  count=0
}
level {
  n = split($0, c, "");
  for (i = 1; i <= n; i++)
  {
    printf(c[i]);
    if (c[i] == ";")
    {
        if(level==1)
        {
            level = 0;
            if (count != 0)
                printf("\n");
        };
    }
    else if (c[i] == "{")
    {
        level++;
        count++;
    }
    else if (c[i] == "}")
    {
        level--;
        count++;
    }
  }
  printf("\n")
}' $i`

该代码会将文件的一部分从/* R */标记切换为&#39 ;;&#39;考虑到括号等细节的符号但这并不重要。我想用变量替换硬编码的/ * R * /:

RECORDSEQ="/* R */"
...
BLOCK=`awk -v rec="$RECORDSEQ" '
rec {
  level=1
  count=0
}

但这不起作用。

我该如何解决?

提前谢谢。

1 个答案:

答案 0 :(得分:0)

找到解决方案:

RECORDSEQ="/* R */"

# Construct regexp for awk
RECORDSEQREG=`echo "$RECORDSEQ" | sed 's:\/:\\\/:g;s:\*:\\\*:g'`

# Cycle for files
for i in $SOURCE;
do
    # Find RECORDSEQ and cut out the block
    BLOCK=`awk -v rec="$RECORDSEQREG" '
$0 ~ rec {
  level=1
  count=0
}
...

非常感谢帮助过的人。