2016-04-15 98 views
0

我具有处于或接近分配新建分配FY其中我必须计算每种.C .CC字的数量和.h锉的问题是,它保持表示在管线8中的语法错误和10 {。这不是一个完成的脚本!它可能有其他一些问题,但我只需要语法错误帮助!语法错误处或附近{

awk 'BEGIN {FS=" ";drb=0;valt=0;} 
     {if (valt == 0){ 
     for(i=1; i<=NF; i++) 
      drb++; 
     valt++; 
     } 
     else{ 
     FNR==1{ printf "File name: %s,Word count: %d\n",FILENAME, drb;drb=0;} 
     for(i=1;i<=NF;i++) 
       drb++;}} 
    END {printf "File name: %s,Word count: %d",FILENAME,drb }' `find $1 -name '*.c' -o -name '*.cc' -o -name '*.h'` 
+2

有语法的错误。考虑你有一个'if/else'语句。在'else'块中,你有一个表达式'FNR == 1'。如果这是一个条件,它不应该也有一个'if'语句吗?你的意思是把它放在'BEGIN'块之外吗? – kojiro

+1

接受你得到的第一个答案通常是一个坏主意。考虑一下 - 考虑到许多人使用这个网站,你得到的第一个答案实际上是最好的答案,甚至是正确的可能性有多大?在你接受答案之后,很少有人会为了试图帮助你而阅读你的问题而烦恼。在接受答案之前提出问题几个小时后给它。此外,编辑您的脚本包括[MCVE]因为有更多的问题与您的脚本比语法错误和这里的人可以帮助你所有的,如果我们确切地知道你正在尝试做的。 –

+1

如果你没有用awk你可以随时使用这个'WC -w文件文件2 ...' – 123

回答

1

内部动作框awk的条件语法是C类,所以你需要:

if (FNR==1) { foo } 

,而不是

FNR==1 { foo } 

,但更重要的是它听起来像所有你需要的是:

awk ' 
{ drb += NF } 
ENDFILE { printf "File name: %s,Word count: %d",FILENAME,drb; drb=0 } 
' files... 

上面使用GNU AWK为ENDFILE。请注意,这会更加的空文件,这是使用其他awks解决的一个大问题(如果他们依靠测试FNR==1,而不是在END部分具有上ARGV[]一个循环,他们将跳过,而不是打印出来的文件名与字计数为零)。

的正确方法与非GAWK awks做到这一点(假设没有重复的文件名)是:

awk ' 
{ drb[FILENAME] += NF } 
END { 
    for (i=1;i<ARGC;i++) { 
     fname = ARGV[i] 
     printf "File name: %s,Word count: %d",fname,drb[fname] 
    } 
} 
' files... 

,如果你能有重复的文件名,然后它来实现变得更加困难,这样的事情(未经测试):

awk ' 
FNR==1 { ++cnt[FILENAME] } 
{ drb[FILENAME,cnt[FILENAME]] += NF } 
END { 
    delete cnt 
    for (i=1;i<ARGC;i++) { 
     fname = ARGV[i] 
     printf "File name: %s,Word count: %d",fname,drb[fname,++cnt[fname]] 
    } 
} 
' files... 
+1

谢谢你的帮助! –

1

我不认为接受的答案是正确的。由于这是一个H/W问题,我会为您提供一个模板来理解和它的工作

awk 'FNR==1{if(s) print f,s; s=0; f=FILENAME} {s+=NF} END{print f,s}' files 

注释:你已经有NF作为循环条件只是用它。 特殊处理是针对第一个文件,但也可以用其他方式完成。

当然是你真正需要的是已经作为一个命令wc

wc -w files 

会给你你需要的结果,管awk您的格式需求来实现。

+0

你是对的,但作者完全意识到。看看她的评论:“谢谢你!它的工作!是的,它应该在一个if/else语句”。她正在编写剧本,陷入困境并在这个特定问题上寻求帮助。 –

+0

好吧,从技术上讲,你修正了语法错误......这是每个人的学习经验。 – karakfa

+0

我坚持你的答案虽然更好。我很高兴你能为这个问题提供更多的见解。 –

相关问题