通过将文件更改为rtf-awk来写入文件

时间:2012-08-27 09:10:28

标签: shell awk converter rtf

我绊倒了一件事:

我在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格式。有人可以帮我找出线索吗?

非常感谢

1 个答案:

答案 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]
  }
}