2012-08-07 73 views
-1

printf的我这样做:占位符目录 - 在AWK

lastnames="test" 
mode="04" 
print $0 >> sprintf("%s\/%s_file_%s.txt",lastnames,lastnames,mode); 

它说:fatal: can't redirect to `/_file_04.txt' (Permission denied)

,但如果我这样做:

lastnames="test" 
mode="04" 
print $0 >> sprintf("test/%s_file_%s.txt",lastnames,mode); 

这是工作。为什么是这样?我做错了什么,或者是否有特殊情况下替换目录名称?还是我必须逃离%s/%s

我会apppreciate任何帮助..非常感谢

+0

错字在变量名'lastname'与'lastnames'。解决问题或删除它。 – 2012-08-07 08:15:54

+0

这样比较好,但你保留了原始的错误信息。再试一次,并报告结果。 – 2012-08-07 10:39:22

+0

错误消息仍然不依赖于“lastnames”,它只是在发布到stackoverflow时发生错误。 – doniyor 2012-08-07 12:13:49

回答

1

这对我的作品。检查变量声明(lastname)和使用情况(lastnames)之间是否存在拼写错误,并且该目录存在,因为awk不会创建它。

一种解决方法可能是避免sprintf,就像这样:

awk ' { 
    lastname="test" 
    mode="04" 
    print $0 >> lastname "/" lastname "_file_" mode ".txt" 
} 
' infile 
+0

哦,是的,这是只有在这里错字,在我的代码是''lastnames''和所在的文件夹already..but它仍然不是为我工作:( – doniyor 2012-08-07 07:57:50

+0

''%s /%s''这样渲染得很好吗? – doniyor 2012-08-07 08:00:43

+0

@ doniyor:是的。我测试了两个并且工作正常。'\ /'版本给了我下面的警告:**转义序列' \ /“视为纯'/” **,但它的工作了。 – Birei 2012-08-07 08:04:58

0

遗憾的是愚蠢的,我用了同样的事情,分裂了这么多次循环几次为一个循环,那么结果这种情况正在发生:

split(name, lastnames, "") => [first, second] 

然后第二个循环亘古不变的有name字符串,因为它已经被分裂..作为一个结果,我指的是这样的:/file.txt因为文件夹名称前是空..

感谢您的意见呢..