awk更换件尺寸限制

时间:2014-02-19 21:21:49

标签: awk size

尝试查找单个单词并将其替换为文件内容。适用于MacOS,但不适用于linux。

这是在linux下失败的awk:

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

(file.xml是122行,4.7K)

错误是:

awk: program limit exceeded: replacement pieces size=255

MacOS下的相同file.xml,使用稍微不同的awk工作正常:

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

重新编译awk不是一个选项。这是32位的Ubuntu 12.04。

3 个答案:

答案 0 :(得分:0)

你可以使用sed

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

答案 1 :(得分:0)

事实证明,好的旧'替换'在这个用例中表现得很糟糕 - 谁会想到?

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

答案 2 :(得分: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
}