如何在令牌上拆分文件?

时间:2008-11-14 15:49:31

标签: unix command-line awk

假设您有一个文件,其中包含以$分隔的文本(从1到N) 如何切割文件,最终结果是N个文件?

  

text1 with newlines $
  text2 $ etc ... $
  textN

我正在考虑使用awk或sed,但是有没有可用的unix应用程序已经完成了这样的任务?

5 个答案:

答案 0 :(得分:3)

  

awk'BEGIN {RS =“$”; ORS =“”} {textNumber ++; print $ 0> “text”textNumber“.out”}'fileName

感谢Bill Karwin的想法。

编辑:添加ORS =“”以避免在每个文件的末尾打印换行符。

答案 1 :(得分:2)

也许split -p 模式

嗯。这可能不是你想要的。它不会分割一行,只会在看到模式时启动一个新文件。它似乎只在BSD相关系统上得到支持。

您可以使用以下内容:

awk 'BEGIN {RS = "$"} { ... }'

编辑:您可能会在{ ... }部分找到一些灵感:

http://www.gnu.org/manual/gawk/html_node/Split-Program.html

编辑:感谢dmckee的评论,但csplit似乎也复制了模式发生的整行。

答案 2 :(得分:1)

如果我正确阅读,可以使用UNIX cut命令。

cut -d $ -f 1- filename

我可能会略微关闭语法,但这应该告诉你使用$ separate字段并将字段1返回到结尾。

您可能需要转义$。

答案 3 :(得分:1)

awk -vRS="$" '{ print $0 > "text"t++".out" }' ORS="" file

答案 4 :(得分:1)

使用split命令我们可以使用字符串进行拆分。

但是csplit命令也允许你根据正则表达式切割文件。