2012-08-07 129 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因爲文件夾名稱前是空..

感謝您的意見呢..