这有效:
awk -F2 '{if (NF > 1) { if (substr($1,0,2) == "..") printf ("%.2f 2%s", ((50*length($1))/1000) , $2); else printf("%s2%s",$1,$2); for (i=3;i<=NF;i++) printf("2%s",$i) } else if (substr($1,0,2) == "..") printf("%.2f",((50*length($1))/1000)); else printf("%s",$1); printf("\n");}'-f debugconsole > debugconsoleWithCount
但是当我按如下方式生成文件countdots.awk时:
BEGIN {
if (NF > 1)
{
if (substr($1,0,2) == "..")
printf ("%.2f 2%s", ((50*length($1))/1000) , $2);
else
printf("%s2%s",$1,$2)
for (i=3;i<=NF;i++)
printf("2%s",$i)
}
else
if (substr($1,0,2) == "..")
printf("%.2f",((50*length($1))/1000));
else printf("%s",$1);
printf("\n");
}
然后像这样运行:
awk -F2 -f countdots4.awk debugconsole > debugconsoleWithCount
我得到一个空的debugconsoleWithCount文件。
答案 0 :(得分:4)
awk
中的 BEGIN 块仅在执行时执行,在读取第一个输入记录之前执行。
END 规则仅执行一次, 后执行所有输入。
在转换过程中,由于您将所有内容都放在BEGIN
块中,因此NF
,$1
,$2
等的值不会变为无操作甚至设定。因此你得到一个空文件。如果你删除它应该工作正常。
BEGIN
和END
块不是必需的,因此您无需将它们保留在awk
脚本中。 BEGIN
通常用于打印标题,标题,将变量初始化为特定值等。END
块通常用于在读取整个输入后进行最终处理。
答案 1 :(得分:0)
基本上这与不了解BEGIN和END有关。
我拿出了BEGIN,它做了我想做的事。
我应该从stackoverflow中删除它吗?让我知道。