题
假设您有一个文件,其中包含以$分隔的文本(从1到N) 如何切割文件,最终结果是N个文件?
text1 with newlines $
text2 $ etc ... $
textN
我正在考虑使用awk或sed,但是有没有可用的unix应用程序已经完成了这样的任务?
解决方案
也许split -p
模式?
嗯。这可能不是你想要的。它不会分割一行,只会在看到模式时启动一个新文件。它似乎只在BSD相关系统上得到支持。
你可以使用类似的东西:
awk 'BEGIN {RS = "$"} { ... }'
编辑:您可能会在{ ... }
部分找到一些灵感:
http://www.gnu.org/manual/gawk /html_node/Split-Program.html
编辑:感谢dmckee的评论,但csplit
似乎也复制了模式发生的整行。
其他提示
awk'BEGIN {RS = <!> quot; $ <!> quot ;; ORS = <!> quot; <!> quot;} {textNumber ++; print $ 0 <!> gt; <!> QUOT;文本QUOT <!>; textNumber QUOT <!>; <!> .OUT QUOT; ''fileName
感谢Bill Karwin的想法。
编辑:添加ORS = <!>“; <!>”;避免在每个文件的末尾打印换行符。
如果我正确阅读,那么UNIX cut 命令可以是用于此。
cut -d $ -f 1- filename
我可能会略微关闭语法,但这应该告诉你使用$ separate字段并将字段1返回到结尾。
您可能需要转义$。
awk -vRS="$" '{ print $0 > "text"t++".out" }' ORS="" file
使用split命令我们可以使用字符串进行拆分。
但是csplit命令也允许你根据正则表达式切割文件。
不隶属于 StackOverflow