2014-02-19 61 views
0

嘗試查找單個單詞並將其替換爲文件的內容。適用於MacOS,但不適用於Linux。Awk更換件尺寸限制

下面是linux下失敗AWK:下

awk: program limit exceeded: replacement pieces size=255 

相同file.xml:

awk -v var="${blah}" '{sub(/%WORD%/,var)}1' file.xml 

(file.xml是122線,4.7K)

錯誤是MacOS,使用稍微不同的awk工作正常:

awk -v var="${blah//$'\n'/\\n}" '{sub(/%WORD%/,var)1}' 

重新編譯awk不是一種選擇。這是Ubuntu 12.04,32位。

+0

你還沒有說blah'有多大'是。 –

回答

0

你可以使用SED

FILE=`cat Filename` 
sed "s/WORD/${FILE}/g" file.xml > newfile.xml 
+0

這不會工作,因爲file.xml包含sed試圖解釋爲命令的字符。錯誤是「sed:-e表達式#1,字符11:未終止的'命令」 –

+1

您不應該使用舊的和過時的背部抽搐,使用括號'$(...)'。 'FILE = $(貓文件名)' – Jotne

0

原來,好老「取代」了執行在這種使用情況下awk的 - 誰曾想到?

replace -v "%WORD%" "$blah" -- file.xml 
0

使用了GNU AWK版本4,readfile擴展:

gawk -f a.awk file.xml 

其中a.awk是:

@load "readfile" 
BEGIN{ 
    var = readfile("blah") 
    if (var == "" && ERRNO != "") 
     print("problem reading file", ERRNO) > "/dev/stderr" 
} 
{ 
    sub(/%WORD%/,var) 
    print 
}