作为规则的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
}
...