作为规则的Awk输入变量

作为规则的Awk输入变量,awk,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

你好

我有下一个代码:

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`
但这不起作用

我怎样才能修好它

提前感谢。

找到了解决方案:

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
}
...

非常感谢帮助过的人。

可能是$0~rec{…},但它已经使用了$0,因为它从文件中读取:}}printf\n}'iMark是正确的。要使动态正则表达式从字符串读取的正则表达式起作用,您需要显式使用正则表达式运算符。对不起。我可能编码错误,但这对我不起作用,我看到空输出:$0~rec{level=1 count=0}…在regexp常量中引用与在字符串常量中引用不同。您可能需要添加一些引用。看见
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
}
...