2012-08-27 29 views
0

我我绊倒了一两件事:写入文件通过更改文件到RTF - awk的

我正在整理中AWK一堆文件并保存选的颗粒为txt。但现在我需要将它们保存为.doc格式,尤其是以横向格式。我GOOGLE了很多,发现这样做的唯一方法是将文件保存为文档,但在创建文件时,将这些文件写入文件,然后将真实内容写入文件。

RTF开始标记代码:

{\rtf1\ansi\deff0 {\fonttbl {\f0 Courier;}} 
{\colortbl;\red0\green0\blue0;\red255\green0\blue0;} 
\landscape 
\paperw15840\paperh12240\margl720\margr720\margt720\margb720 

和RTF关闭标签:

} 

收盘代码将在文件的最后一行的最后一个行之后被写入新创建的文件。

我的问题是,我怎么才能找到文件的最后一行,在来到END之前在awk里面。

这是我的代码。 http://pastebin.com/mfjH4NYY 知道发生了什么是巨大的代码,但重点是:END标记中没有fnnID,通过这个,如果我尝试附加} char来关闭rtf格式,则会创建一个新文件。有人能帮我弄清楚线索吗?

非常感谢

回答

3

假设你有一个函数write_header(filepath),将RTF头写入文件。在一些全局变量中使这个函数记录全部通过filepath。然后,在您的END中,遍历这些filepath s并将RTF页脚写入它们中。

至于你的新“ls -l”问题:我不明白你为什么需要使用它。

这里是我的建议:

function write_header(filepath) { 
    print "{\\rtf1\\ans .... " >> filepath 
    tracked[max_header++] = filepath 
} 

BEGIN { 
    # You don't have to write the headers in BEGIN. Just make sure it's the 
    # first thing you write to the files. 
    write_header("file1.doc") 
    write_header("file2.doc") 
    write_header("another_file.doc") 
} 

END { 
    # Write the footers. 
    for(i in tracked) { 
    print "}" >> tracked[i] 
    } 
} 
+0

哦好,所以在''END''我会遍历所有的文件,然后插入RTF结束标记他们每个人。但我怎么可以在awk里面'ls -l''? – doniyor