我绊倒了一件事:
我在awk中排序一堆文件并将排序后的粒子保存为txt。但现在我需要将它们保存为.doc,尤其是横向格式。我搜索了很多,发现这样做的唯一方法是将文件保存为doc但在创建文件时,将这些rtf code
写入文件,然后将实际内容写入文件。
rtf start-tag代码:
{\rtf1\ansi\deff0 {\fonttbl {\f0 Courier;}}
{\colortbl;\red0\green0\blue0;\red255\green0\blue0;}
\landscape
\paperw15840\paperh12240\margl720\margr720\margt720\margb720
和rtf close-tag:
}
close标记将写在文件的最后一行之后,作为新创建文件的最后一行。
我的问题是,如何在进入END
之前在awk中找到文件的最后一行。
这是我的代码。 http://pastebin.com/mfjH4NYY
知道发生了什么是巨大的代码,但重点是:fnnID
标签中没有END
,如果我尝试附加{}
,则会创建一个新文件1}} char关闭rtf格式。有人可以帮我找出线索吗?
非常感谢
答案 0 :(得分:3)
假设你有一个函数write_header(filepath)
,它会将RTF头写入文件。将此函数记录在某个全局变量中,传递它的所有filepath
。然后,在你的END中,循环遍历这些filepath
并将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]
}
}